changeset 5939:8f1d94246a8f HEAD

Delay initializing ioloop backend until it's needed.
author Timo Sirainen <tss@iki.fi>
date Mon, 09 Jul 2007 07:04:51 +0300
parents 805f2527a982
children b985e2127a2d
files src/lib/ioloop.c
diffstat 1 files changed, 8 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/ioloop.c	Mon Jul 09 07:01:08 2007 +0300
+++ b/src/lib/ioloop.c	Mon Jul 09 07:04:51 2007 +0300
@@ -36,6 +36,8 @@
 	io->refcount = 1;
 	io->fd = fd;
 
+	if (current_ioloop->handler_context == NULL)
+		io_loop_handler_init(current_ioloop);
 	io_loop_handle_add(current_ioloop, io);
 
 	if (current_ioloop->io_files != NULL) {
@@ -293,7 +295,10 @@
 
 void io_loop_run(struct ioloop *ioloop)
 {
-        ioloop->running = TRUE;
+	if (ioloop->handler_context == NULL)
+		io_loop_handler_init(ioloop);
+
+	ioloop->running = TRUE;
 	while (ioloop->running)
 		io_loop_handler_run(ioloop);
 }
@@ -323,7 +328,6 @@
 	ioloop_time = ioloop_timeval.tv_sec;
 
         ioloop = i_new(struct ioloop, 1);
-	io_loop_handler_init(ioloop);
 
 	ioloop->prev = current_ioloop;
         current_ioloop = ioloop;
@@ -357,7 +361,8 @@
 		i_free(to);
 	}
 	
-        io_loop_handler_deinit(ioloop);
+	if (current_ioloop->handler_context != NULL)
+		io_loop_handler_deinit(ioloop);
 
         /* ->prev won't work unless loops are destroyed in create order */
         i_assert(ioloop == current_ioloop);