[memcached] sgrimm, r441: Multithreading prep: Explicitly associat...

commits at code.sixapart.com commits at code.sixapart.com
Thu Nov 23 05:44:38 UTC 2006


Multithreading prep: Explicitly associate libevent events with event_bases
(in this commit there is just one of them.)


U   branches/multithreaded/server/memcached.c
U   branches/multithreaded/server/memcached.h


Modified: branches/multithreaded/server/memcached.c
===================================================================
--- branches/multithreaded/server/memcached.c	2006-11-23 03:02:14 UTC (rev 440)
+++ branches/multithreaded/server/memcached.c	2006-11-23 05:44:38 UTC (rev 441)
@@ -64,6 +64,7 @@
 static int delcurr;
 static int deltotal;
 static conn *listen_conn;
+static struct event_base *main_base;
 
 #define TRANSMIT_COMPLETE   0
 #define TRANSMIT_INCOMPLETE 1
@@ -210,7 +211,7 @@
 }
 
 conn *conn_new(int sfd, int init_state, int event_flags,
-               int read_buffer_size, int is_udp) {
+               int read_buffer_size, int is_udp, struct event_base *base) {
     conn *c = conn_from_freelist();
 
     if (NULL == c) {
@@ -282,6 +283,7 @@
     c->gen = 0;
 
     event_set(&c->event, sfd, event_flags, event_handler, (void *)c);
+    event_base_set(base, &c->event);
     c->ev_flags = event_flags;
 
     if (event_add(&c->event, 0) == -1) {
@@ -1529,10 +1531,12 @@
 }
 
 int update_event(conn *c, int new_flags) {
+    struct event_base *base = c->event.ev_base;
     if (c->ev_flags == new_flags)
         return 1;
     if (event_del(&c->event) == -1) return 0;
     event_set(&c->event, c->sfd, new_flags, event_handler, (void *)c);
+    event_base_set(base, &c->event);
     c->ev_flags = new_flags;
     if (event_add(&c->event, 0) == -1) return 0;
     return 1;
@@ -1653,7 +1657,7 @@
                 break;
             }
             newc = conn_new(sfd, conn_read, EV_READ | EV_PERSIST,
-                            DATA_BUFFER_SIZE, 0);
+                            DATA_BUFFER_SIZE, 0, main_base);
             if (!newc) {
                 if (settings.verbose > 0)
                     fprintf(stderr, "couldn't create new connection\n");
@@ -2055,6 +2059,7 @@
     }
 
     evtimer_set(&clockevent, clock_handler, 0);
+    event_base_set(main_base, &clockevent);
     t.tv_sec = 1;
     t.tv_usec = 0;
     evtimer_add(&clockevent, &t);
@@ -2077,6 +2082,7 @@
     }
 
     evtimer_set(&deleteevent, delete_handler, 0);
+    event_base_set(main_base, &deleteevent);
     t.tv_sec = 5; t.tv_usec=0;
     evtimer_add(&deleteevent, &t);
 
@@ -2436,10 +2442,11 @@
         }
     }
 
+    /* initialize main thread libevent instance */
+    main_base = event_init();
 
     /* initialize other stuff */
     item_init();
-    event_init();
     stats_init();
     assoc_init();
     conn_init();
@@ -2476,16 +2483,11 @@
         exit(1);
     }
     /* create the initial listening connection */
-    if (!(listen_conn = conn_new(l_socket, conn_listening, EV_READ | EV_PERSIST, 1, 0))) {
+    if (!(listen_conn = conn_new(l_socket, conn_listening,
+                                 EV_READ | EV_PERSIST, 1, 0, main_base))) {
         fprintf(stderr, "failed to create listening connection");
         exit(1);
     }
-    /* create the initial listening udp connection */
-    if (u_socket > -1 &&
-        !(u_conn = conn_new(u_socket, conn_read, EV_READ | EV_PERSIST, UDP_READ_BUFFER_SIZE, 1))) {
-        fprintf(stderr, "failed to create udp connection");
-        exit(1);
-    }
     /* initialise clock event */
     clock_handler(0,0,0);
     /* initialise deletion array and timer event */
@@ -2495,8 +2497,15 @@
     /* save the PID in if we're a daemon */
     if (daemonize)
         save_pid(getpid(),pid_file);
+    /* create the initial listening udp connection */
+    if (u_socket > -1 &&
+        !(u_conn = conn_new(u_socket, conn_read, EV_READ | EV_PERSIST,
+                            UDP_READ_BUFFER_SIZE, 1, main_base))) {
+        fprintf(stderr, "failed to create udp connection");
+        exit(1);
+    }
     /* enter the loop */
-    event_loop(0);
+    event_base_loop(main_base, 0);
     /* remove the PID file if we're a daemon */
     if (daemonize)
         remove_pidfile(pid_file);

Modified: branches/multithreaded/server/memcached.h
===================================================================
--- branches/multithreaded/server/memcached.h	2006-11-23 03:02:14 UTC (rev 440)
+++ branches/multithreaded/server/memcached.h	2006-11-23 05:44:38 UTC (rev 441)
@@ -242,7 +242,7 @@
 void event_handler(int fd, short which, void *arg);
 conn *conn_from_freelist();
 int conn_add_to_freelist(conn *c);
-conn *conn_new(int sfd, int init_state, int event_flags, int read_buffer_size, int is_udp);
+conn *conn_new(int sfd, int init_state, int event_flags, int read_buffer_size, int is_udp, struct event_base *event_base);
 void conn_close(conn *c);
 void conn_init(void);
 void accept_new_conns(int do_accept);




More information about the memcached-commits mailing list