From: Timo Sirainen Date: Sat, 13 Mar 2010 13:25:44 +0000 (+0200) Subject: ioloop-select: IO_ERROR wasn't really working. X-Git-Tag: 2.0.beta4~77 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=24caefa18e594c0b392e96df0489fc1a945faa25;p=thirdparty%2Fdovecot%2Fcore.git ioloop-select: IO_ERROR wasn't really working. --HG-- branch : HEAD --- diff --git a/src/lib/ioloop-select.c b/src/lib/ioloop-select.c index 468faeeb1b..a480f130fb 100644 --- a/src/lib/ioloop-select.c +++ b/src/lib/ioloop-select.c @@ -65,9 +65,9 @@ void io_loop_handle_add(struct io_file *io) if (fd >= FD_SETSIZE) i_fatal("fd %d too large for select()", fd); - if (condition & IO_READ) + if ((condition & (IO_READ | IO_ERROR)) != 0) FD_SET(fd, &ctx->read_fds); - if (condition & IO_WRITE) + if ((condition & IO_WRITE) != 0) FD_SET(fd, &ctx->write_fds); FD_SET(fd, &ctx->except_fds); @@ -83,9 +83,9 @@ void io_loop_handle_remove(struct io_file *io, bool closed ATTR_UNUSED) i_assert(fd >= 0 && fd < FD_SETSIZE); - if (condition & IO_READ) + if ((condition & (IO_READ | IO_ERROR)) != 0) FD_CLR(fd, &ctx->read_fds); - if (condition & IO_WRITE) + if ((condition & IO_WRITE) != 0) FD_CLR(fd, &ctx->write_fds); if (!FD_ISSET(fd, &ctx->read_fds) && !FD_ISSET(fd, &ctx->write_fds)) { @@ -99,7 +99,7 @@ void io_loop_handle_remove(struct io_file *io, bool closed ATTR_UNUSED) } #define io_check_condition(ctx, fd, cond) \ - ((FD_ISSET((fd), &(ctx)->tmp_read_fds) && ((cond) & IO_READ)) || \ + ((FD_ISSET((fd), &(ctx)->tmp_read_fds) && ((cond) & (IO_READ|IO_ERROR))) || \ (FD_ISSET((fd), &(ctx)->tmp_write_fds) && ((cond) & IO_WRITE)) || \ (FD_ISSET((fd), &(ctx)->tmp_except_fds)))