fix: ustcomm_close_unix_sock should close, not shutdown
[lttng-ust.git] / liblttng-ust-comm / lttng-ust-comm.c
index 3277191c397f101e0cffa6dc30fdf0d3f9ed8049..b90f5fe7baa0f64f8374bed6e367d96939baa312 100644 (file)
@@ -248,8 +248,10 @@ ssize_t ustcomm_recv_unix_sock(int sock, void *buf, size_t len)
        msg.msg_iov = iov;
        msg.msg_iovlen = 1;
 
-       ret = recvmsg(sock, &msg, 0);
-       if (ret < 0) {
+       do {
+               ret = recvmsg(sock, &msg, 0);
+       } while (ret < 0 && errno == EINTR);
+       if (ret < 0 && errno != EPIPE) {
                perror("recvmsg");
        }
 
@@ -283,7 +285,7 @@ ssize_t ustcomm_send_unix_sock(int sock, void *buf, size_t len)
         * libust side.
         */
        ret = sendmsg(sock, &msg, MSG_NOSIGNAL);
-       if (ret < 0) {
+       if (ret < 0 && errno != EPIPE) {
                perror("sendmsg");
        }
 
@@ -299,10 +301,9 @@ int ustcomm_close_unix_sock(int sock)
 {
        int ret;
 
-       /* Shutdown receptions and transmissions */
-       ret = shutdown(sock, SHUT_RDWR);
+       ret = close(sock);
        if (ret < 0) {
-               perror("shutdown");
+               perror("close");
        }
 
        return ret;
@@ -347,7 +348,7 @@ ssize_t ustcomm_send_fds_unix_sock(int sock, void *buf, int *fds, size_t nb_fd,
        msg.msg_iovlen = 1;
 
        ret = sendmsg(sock, &msg, 0);
-       if (ret < 0) {
+       if (ret < 0 && errno != EPIPE) {
                perror("sendmsg");
        }
 
@@ -462,8 +463,13 @@ int ustcomm_recv_fd(int sock)
        msg.msg_control = recv_fd;
        msg.msg_controllen = sizeof(recv_fd);
 
-       if ((ret = recvmsg(sock, &msg, 0)) < 0) {
-               perror("recvmsg");
+       do {
+               ret = recvmsg(sock, &msg, 0);
+       } while (ret < 0 && errno == EINTR);
+       if (ret < 0) {
+               if (errno != EPIPE) {
+                       perror("recvmsg");
+               }
                goto end;
        }
        if (ret != sizeof(data_fd)) {
This page took 0.023652 seconds and 4 git commands to generate.