]> git.mikk.net Git - smtpsink/commitdiff
Use explicit libevent bases. The implicit "current_base"
authorchris mikkelson <chris@mikk.net>
Fri, 27 Mar 2009 00:00:09 +0000 (19:00 -0500)
committerchris mikkelson <chris@mikk.net>
Fri, 27 Mar 2009 00:00:09 +0000 (19:00 -0500)
might cause breakage if a module also calls event_init().

conn_queue.c
conn_queue.h
io.c
smtpsink-int.h
smtpsink.c

index c2cbec616cd1780eb3caaffb3788f04ac6b37f25..f3e9d30d972aee30a1166eaa035761f52b8df949 100644 (file)
@@ -13,6 +13,7 @@
 struct event_qstate {
        int fds[2];
        struct event e;
+       struct event_base *base;
 };
 
 struct tpool_qstate {
@@ -91,6 +92,16 @@ conn_queue_set_tpool_size(struct conn_queue *cq, int start)
        return 1;
 }
 
+int
+conn_queue_set_evbase(struct conn_queue *cq, struct event_base *base)
+{
+       struct event_qstate *ep;
+       if (cq->type != Q_EVENT) return 0;
+       ep = (struct event_qstate *)cq->priv;
+       ep->base = base;
+       return 1;
+}
+
 static void
 event_enqueue(struct conn_queue *cq, struct conn *c)
 {
@@ -130,6 +141,7 @@ event_run(struct conn_queue *cq)
        struct event_qstate *ep = (struct event_qstate *)cq->priv;
        event_set(&ep->e, ep->fds[0], EV_READ|EV_PERSIST,
                        event_callback, (void *)cq);
+       if (ep->base) event_base_set(ep->base, &ep->e);
        event_add(&ep->e, 0);
 }
 
index 4b25885d059d03011bb42ccaa263cad4ffd761f3..bbbdbb5b1dafcfb741d77ccf442312fd02bb04a9 100644 (file)
@@ -17,6 +17,7 @@ struct conn_queue {
 
 int conn_queue_init(struct conn_queue *, void (*)(struct conn *), int);
 int conn_queue_set_tpool_size(struct conn_queue *, int);
+int conn_queue_set_evbase(struct conn_queue *, struct event_base *);
 /*
        To setup:
 
diff --git a/io.c b/io.c
index cbfa68560cf49aa140499597aed5009203c6f04f..b6258dcc90af6b850aec5f7123ec1926ab7e96fa 100644 (file)
--- a/io.c
+++ b/io.c
@@ -11,6 +11,7 @@
 #include "smtpsink-int.h"
 
 struct conn_queue io_queue;
+static struct event_base *io_base;
 static struct timeval timeout = {20, 0};
 
 static void
@@ -28,8 +29,9 @@ handle_ioreq(struct conn *c)
 void
 io_init(void)
 {
-       event_init();
+       io_base = event_init();
        conn_queue_init(&io_queue, handle_ioreq, Q_EVENT);
+       conn_queue_set_evbase(&io_queue, io_base);
        io_queue.run(&io_queue);
 }
 
@@ -95,6 +97,14 @@ void
 io_initconn(struct conn *c)
 {
        event_set(&c->re, c->fd, EV_READ, read_cb, (void *)c);
+       event_base_set(io_base, &c->re);
        event_set(&c->we, c->fd, EV_WRITE, write_cb, (void *)c);
+       event_base_set(io_base, &c->we);
+}
+
+void
+io_dispatch(void)
+{
+       event_base_dispatch(io_base);
 }
 
index fcc4529419938732c9cdcfcf53924397b8101b06..5e87033da561b90657b61fa227cebe30b90becea 100644 (file)
@@ -6,6 +6,7 @@ extern void new_listener(char *);
 extern void start_listeners(void);
 
 extern void io_init(void);
+extern void io_dispatch(void);
 extern void io_initconn(struct conn *);
 
 extern int conn_queue_init(struct conn_queue *, void (*)(struct conn *), int);
index 83115203d5a5cd205d08a3a755c84335c14b74d5..f479085586838ca07ba73a2d557874f6cb5aa35f 100644 (file)
@@ -136,13 +136,12 @@ main(int argc, char **argv)
        signal(SIGPIPE,SIG_IGN);
 
        pthread_create(&sl, 0, sigloop, event_init()); 
-       event_init();
 
        conn_pool_init(concurrency);
        io_init();
        smtp_init(tstart);
        start_listeners();
        /* modules_init(); */
-       event_dispatch();
+       io_dispatch();
        return 0;
 }