]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Handle EINTR in epoll
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 27 May 2009 20:27:25 +0000 (22:27 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 27 May 2009 20:30:48 +0000 (22:30 +0200)
src/iop.c
src/proto_inet.c

index 7b90c50c1cbb0fbb2155cb5e17ff3a491f734dc0..f6dca49e57319e83b43b12865963f697447ea549 100644 (file)
--- a/src/iop.c
+++ b/src/iop.c
@@ -524,7 +524,7 @@ void *forb_iop_receiver_thread(void *arg)
                                   &c->buffer[c->wptr],
                                   c->wptr_max - c->wptr);
                if (rcvd < 0) {
-                       ul_logmsg("recv returned error %d\n", rcvd);
+                       ul_logerr("recv returned error %d (%s), exiting\n", rcvd, strerror(errno));
                        return NULL;
                }
                c->wptr += rcvd;
index 1da3605d0987a9abdc47703db5b98b5be0c62f19..3281aed57007dc8205bd59c9ef62f19c9b0e9652 100644 (file)
@@ -313,6 +313,8 @@ inet_recv(forb_port_t *port, void *buf, size_t len)
        for (;;) {
                if (iport->last_recv_fd == -1) {
                        nfds = epoll_wait(iport->epoll_fd, &ev, 1, -1);
+                       if (nfds == -1 && errno == EINTR)
+                               continue;
                        if (nfds < 1)
                                return -1;
                        if (ev.data.fd == iport->listen_socket) {