[dovecot-cvs] dovecot/src/lib ioloop-poll.c,1.16,1.17 ioloop-select.c,1.12,1.13 ioloop.c,1.17,1.18

cras at procontrol.fi cras at procontrol.fi
Sat May 24 19:16:50 EEST 2003


Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv4373/lib

Modified Files:
	ioloop-poll.c ioloop-select.c ioloop.c 
Log Message:
bugfixes



Index: ioloop-poll.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/ioloop-poll.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- ioloop-poll.c	23 May 2003 14:47:25 -0000	1.16
+++ ioloop-poll.c	24 May 2003 15:16:47 -0000	1.17
@@ -212,8 +212,10 @@
 				if (t_pop() != t_id)
 					i_panic("Leaked a t_pop() call!");
 
-				if (io->destroyed)
+				if (io->destroyed) {
 					io_destroy(ioloop, io_p);
+					continue;
+				}
 			}
 		}
 

Index: ioloop-select.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/ioloop-select.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- ioloop-select.c	23 May 2003 14:40:50 -0000	1.12
+++ ioloop-select.c	24 May 2003 15:16:47 -0000	1.13
@@ -121,15 +121,17 @@
 		condition = io->condition;
 
 		if (io_check_condition(fd, condition)) {
+			ret--;
+
 			t_id = t_push();
 			io->callback(io->context);
 			if (t_pop() != t_id)
 				i_panic("Leaked a t_pop() call!");
 
-			if (io->destroyed)
+			if (io->destroyed) {
 				io_destroy(ioloop, io_p);
-
-			ret--;
+				continue;
+			}
 		}
 
 		io_p = &io->next;

Index: ioloop.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/ioloop.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- ioloop.c	23 May 2003 14:40:50 -0000	1.17
+++ ioloop.c	24 May 2003 15:16:47 -0000	1.18
@@ -58,7 +58,7 @@
 
 struct io *io_add(int fd, int condition, io_callback_t *callback, void *context)
 {
-	struct io *io;
+	struct io *io, **io_p;
 
 	i_assert(fd >= 0);
 	i_assert(callback != NULL);
@@ -75,8 +75,11 @@
 
         io_loop_handle_add(current_ioloop, io->fd, io->condition);
 
-	io->next = current_ioloop->ios;
-	current_ioloop->ios = io;
+	/* have to append it, or io_destroy() breaks */
+        io_p = &current_ioloop->ios;
+	while (*io_p != NULL)
+		io_p = &(*io_p)->next;
+	*io_p = io;
 	return io;
 }
 



More information about the dovecot-cvs mailing list