summaryrefslogtreecommitdiff
path: root/memcached.c
diff options
context:
space:
mode:
Diffstat (limited to 'memcached.c')
-rw-r--r--memcached.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/memcached.c b/memcached.c
index 5a8fc8e..0e96aa9 100644
--- a/memcached.c
+++ b/memcached.c
@@ -189,6 +189,7 @@ static void settings_init(void) {
settings.factor = 1.25;
settings.chunk_size = 48; /* space for a modest key and value */
settings.num_threads = 4; /* N workers */
+ settings.num_threads_per_udp = 0;
settings.prefix_delimiter = ':';
settings.detail_enabled = 0;
settings.reqs_per_event = 20;
@@ -2437,6 +2438,7 @@ static void process_stat_settings(ADD_STAT add_stats, void *c) {
APPEND_STAT("growth_factor", "%.2f", settings.factor);
APPEND_STAT("chunk_size", "%d", settings.chunk_size);
APPEND_STAT("num_threads", "%d", settings.num_threads);
+ APPEND_STAT("num_threads_per_udp", "%d", settings.num_threads_per_udp);
APPEND_STAT("stat_key_prefix", "%c", settings.prefix_delimiter);
APPEND_STAT("detail_enabled", "%s",
settings.detail_enabled ? "yes" : "no");
@@ -3912,7 +3914,7 @@ static int server_socket(const char *interface,
if (IS_UDP(transport)) {
int c;
- for (c = 0; c < settings.num_threads; c++) {
+ for (c = 0; c < settings.num_threads_per_udp; c++) {
/* this is guaranteed to hit all threads because we round-robin */
dispatch_conn_new(sfd, conn_read, EV_READ | EV_PERSIST,
UDP_READ_BUFFER_SIZE, transport);
@@ -4575,6 +4577,16 @@ int main (int argc, char **argv) {
}
}
+ /*
+ * Use one workerthread to serve each UDP port if the user specified
+ * multiple ports
+ */
+ if (settings.inter != NULL && strchr(settings.inter, ',')) {
+ settings.num_threads_per_udp = 1;
+ } else {
+ settings.num_threads_per_udp = settings.num_threads;
+ }
+
if (settings.sasl) {
if (!protocol_specified) {
settings.binding_protocol = binary_prot;