Fix: recvmsg should handle EINTR
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 6 Mar 2012 23:16:12 +0000 (18:16 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 6 Mar 2012 23:16:54 +0000 (18:16 -0500)
Acked-by: David Goulet <dgoulet@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
src/common/sessiond-comm/sessiond-comm.c

index 61f4ed52ba2dfffe98591e7e65b3ae7deef70336..e767c5c2347ba2908b1137259ee8395ee1653c7c 100644 (file)
@@ -267,7 +267,9 @@ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len)
        msg.msg_iov = iov;
        msg.msg_iovlen = 1;
 
-       ret = recvmsg(sock, &msg, MSG_WAITALL);
+       do {
+               ret = recvmsg(sock, &msg, MSG_WAITALL);
+       } while (ret < 0 && errno == EINTR);
        if (ret < 0) {
                PERROR("recvmsg");
        }
@@ -405,7 +407,9 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd)
        msg.msg_control = recv_fd;
        msg.msg_controllen = sizeof(recv_fd);
 
-       ret = recvmsg(sock, &msg, 0);
+       do {
+               ret = recvmsg(sock, &msg, 0);
+       } while (ret < 0 && errno == EINTR);
        if (ret < 0) {
                PERROR("recvmsg fds");
                goto end;
@@ -532,7 +536,9 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len,
        msg.msg_controllen = sizeof(anc_buf);
 #endif /* __linux__ */
 
-       ret = recvmsg(sock, &msg, 0);
+       do {
+               ret = recvmsg(sock, &msg, 0);
+       } while (ret < 0 && errno == EINTR);
        if (ret < 0) {
                PERROR("recvmsg fds");
                goto end;
This page took 0.034135 seconds and 4 git commands to generate.