[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