[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 = ¤t_ioloop->ios;
+ while (*io_p != NULL)
+ io_p = &(*io_p)->next;
+ *io_p = io;
return io;
}
More information about the dovecot-cvs
mailing list