[dovecot-cvs] dovecot/src/lib ioloop-epoll.c, 1.21, 1.22 ioloop-internal.h, 1.19, 1.20 ioloop-kqueue.c, 1.16, 1.17 ioloop-poll.c, 1.35, 1.36 ioloop-select.c, 1.25, 1.26 ioloop.c, 1.45, 1.46

tss at dovecot.org tss at dovecot.org
Thu Mar 15 16:38:28 EET 2007


Update of /var/lib/cvs/dovecot/src/lib
In directory talvi:/tmp/cvs-serv11825

Modified Files:
	ioloop-epoll.c ioloop-internal.h ioloop-kqueue.c ioloop-poll.c 
	ioloop-select.c ioloop.c 
Log Message:
If poll()/etc. timeouts, we didn't handle time timeouts immediately but
called poll()/etc again with zero timeout and then handled the timeouts.



Index: ioloop-epoll.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/ioloop-epoll.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- ioloop-epoll.c	8 Mar 2007 22:04:21 -0000	1.21
+++ ioloop-epoll.c	15 Mar 2007 14:38:25 -0000	1.22
@@ -170,7 +170,7 @@
 		i_fatal("epoll_wait(): %m");
 
 	/* execute timeout handlers */
-        io_loop_handle_timeouts(ioloop);
+        io_loop_handle_timeouts(ioloop, ret == 0);
 
 	if (!ioloop->running)
 		return;

Index: ioloop-internal.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/ioloop-internal.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- ioloop-internal.h	8 Mar 2007 22:04:21 -0000	1.19
+++ ioloop-internal.h	15 Mar 2007 14:38:25 -0000	1.20
@@ -52,7 +52,7 @@
 
 int io_loop_get_wait_time(struct timeout *timeout, struct timeval *tv,
 			  struct timeval *tv_now);
-void io_loop_handle_timeouts(struct ioloop *ioloop);
+void io_loop_handle_timeouts(struct ioloop *ioloop, bool update_run_now);
 
 /* I/O handler calls */
 void io_loop_handle_add(struct ioloop *ioloop, struct io_file *io);

Index: ioloop-kqueue.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/ioloop-kqueue.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- ioloop-kqueue.c	8 Mar 2007 22:04:21 -0000	1.16
+++ ioloop-kqueue.c	15 Mar 2007 14:38:25 -0000	1.17
@@ -140,7 +140,7 @@
 	}
 
 	/* execute timeout handlers */
-	io_loop_handle_timeouts(ioloop);
+	io_loop_handle_timeouts(ioloop, ret == 0);
 
 	for (i = 0; i < ret; i++) {
 		/* io_loop_handle_add() may cause events array reallocation,

Index: ioloop-poll.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/ioloop-poll.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- ioloop-poll.c	8 Mar 2007 22:04:21 -0000	1.35
+++ ioloop-poll.c	15 Mar 2007 14:38:25 -0000	1.36
@@ -156,7 +156,7 @@
 		i_fatal("poll(): %m");
 
 	/* execute timeout handlers */
-        io_loop_handle_timeouts(ioloop);
+        io_loop_handle_timeouts(ioloop, ret == 0);
 
 	if (ret <= 0 || !ioloop->running) {
                 /* no I/O events */

Index: ioloop-select.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/ioloop-select.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- ioloop-select.c	8 Mar 2007 22:04:21 -0000	1.25
+++ ioloop-select.c	15 Mar 2007 14:38:25 -0000	1.26
@@ -123,7 +123,7 @@
 		i_warning("select() : %m");
 
 	/* execute timeout handlers */
-        io_loop_handle_timeouts(ioloop);
+        io_loop_handle_timeouts(ioloop, ret == 0);
 
 	if (ret <= 0 || !ioloop->running) {
                 /* no I/O events */

Index: ioloop.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/ioloop.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- ioloop.c	15 Mar 2007 14:28:00 -0000	1.45
+++ ioloop.c	15 Mar 2007 14:38:25 -0000	1.46
@@ -182,7 +182,7 @@
         return 0;
 }
 
-void io_loop_handle_timeouts(struct ioloop *ioloop)
+void io_loop_handle_timeouts(struct ioloop *ioloop, bool update_run_now)
 {
 	struct timeout *called_timeouts;
 	struct timeval tv;
@@ -220,13 +220,14 @@
 			}
 
 			/* Try again. */
-			io_loop_handle_timeouts(ioloop);
+			io_loop_handle_timeouts(ioloop, TRUE);
 		}
 	}
 
 	ioloop_time = ioloop_timeval.tv_sec;
 
-	if (ioloop->timeouts == NULL || !ioloop->timeouts->run_now)
+	if (ioloop->timeouts == NULL ||
+	    (!ioloop->timeouts->run_now && !update_run_now))
 		return;
 
 	called_timeouts = NULL;



More information about the dovecot-cvs mailing list