X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fio%2Fpoll.c;h=b005a97e4b1d07879a4e281a8d48276baaac2fa1;hp=a4e83ed761e77251767b01b3e3f5c5dd3492bfcd;hb=e2d15a2bcb78dba323c4a807543fcc0cb1b03ef0;hpb=e846b1a93ecf096164ff2c4faaf4a89c24a0e76b diff --git a/ccan/io/poll.c b/ccan/io/poll.c index a4e83ed7..b005a97e 100644 --- a/ccan/io/poll.c +++ b/ccan/io/poll.c @@ -130,9 +130,11 @@ void backend_new_plan(struct io_conn *conn) num_waiting--; pfd->events = 0; - if (conn->plan[IO_IN].status == IO_POLLING) + if (conn->plan[IO_IN].status == IO_POLLING_NOTSTARTED + || conn->plan[IO_IN].status == IO_POLLING_STARTED) pfd->events |= POLLIN; - if (conn->plan[IO_OUT].status == IO_POLLING) + if (conn->plan[IO_OUT].status == IO_POLLING_NOTSTARTED + || conn->plan[IO_OUT].status == IO_POLLING_STARTED) pfd->events |= POLLOUT; if (pfd->events) { @@ -278,8 +280,13 @@ void *io_loop(struct timers *timers, struct timer **expired) } r = pollfn(pollfds, num_fds, ms_timeout); - if (r < 0) + if (r < 0) { + /* Signals shouldn't break us, unless they set + * io_loop_return. */ + if (errno == EINTR) + continue; break; + } for (i = 0; i < num_fds && !io_loop_return; i++) { struct io_conn *c = (void *)fds[i];