<div dir="ltr">Merged.<div>Thanks.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 16, 2016 at 10:08 PM, Bart Van Assche <span dir="ltr"><<a href="mailto:bart.vanassche@sandisk.com" target="_blank">bart.vanassche@sandisk.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The behavior we want is as follows:<br>
* If stdout or stderr is closed then SIGPIPE causes termination.<br>
* Sending data to a socket that has been closed by the receiver<br>
  does not cause multipathd to stop.<br>
<br>
Hence unblock SIGPIPE and use MSG_NOSIGNAL when sending data over<br>
a socket.<br>
<br>
Signed-off-by: Bart Van Assche <<a href="mailto:bart.vanassche@sandisk.com">bart.vanassche@sandisk.com</a>><br>
Cc: Benjamin Marzinski <<a href="mailto:bmarzins@redhat.com">bmarzins@redhat.com</a>><br>
Cc: Gris Ge <<a href="mailto:fge@redhat.com">fge@redhat.com</a>><br>
---<br>
 libmpathcmd/mpath_cmd.c |  4 ++--<br>
 libmultipath/uxsock.c   | 17 ++---------------<br>
 multipathd/main.c       |  8 +-------<br>
 3 files changed, 5 insertions(+), 24 deletions(-)<br>
<br>
diff --git a/libmpathcmd/mpath_cmd.c b/libmpathcmd/mpath_cmd.c<br>
index c058479..667a2dc 100644<br>
--- a/libmpathcmd/mpath_cmd.c<br>
+++ b/libmpathcmd/mpath_cmd.c<br>
@@ -33,7 +33,7 @@ static ssize_t read_all(int fd, void *buf, size_t len, unsigned int timeout)<br>
                        return -1;<br>
                } else if (!pfd.revents & POLLIN)<br>
                        continue;<br>
-               n = read(fd, buf, len);<br>
+               n = recv(fd, buf, len, 0);<br>
                if (n < 0) {<br>
                        if ((errno == EINTR) || (errno == EAGAIN))<br>
                                continue;<br>
@@ -56,7 +56,7 @@ static size_t write_all(int fd, const void *buf, size_t len)<br>
        size_t total = 0;<br>
<br>
        while (len) {<br>
-               ssize_t n = write(fd, buf, len);<br>
+               ssize_t n = send(fd, buf, len, MSG_NOSIGNAL);<br>
                if (n < 0) {<br>
                        if ((errno == EINTR) || (errno == EAGAIN))<br>
                                continue;<br>
diff --git a/libmultipath/uxsock.c b/libmultipath/uxsock.c<br>
index 775e278..880257f 100644<br>
--- a/libmultipath/uxsock.c<br>
+++ b/libmultipath/uxsock.c<br>
@@ -81,7 +81,7 @@ size_t write_all(int fd, const void *buf, size_t len)<br>
        size_t total = 0;<br>
<br>
        while (len) {<br>
-               ssize_t n = write(fd, buf, len);<br>
+               ssize_t n = send(fd, buf, len, MSG_NOSIGNAL);<br>
                if (n < 0) {<br>
                        if ((errno == EINTR) || (errno == EAGAIN))<br>
                                continue;<br>
@@ -138,20 +138,7 @@ ssize_t read_all(int fd, void *buf, size_t len, unsigned int timeout)<br>
  */<br>
 int send_packet(int fd, const char *buf)<br>
 {<br>
-       int ret = 0;<br>
-       sigset_t set, old;<br>
-<br>
-       /* Block SIGPIPE */<br>
-       sigemptyset(&set);<br>
-       sigaddset(&set, SIGPIPE);<br>
-       pthread_sigmask(SIG_BLOCK, &set, &old);<br>
-<br>
-       ret = mpath_send_cmd(fd, buf);<br>
-<br>
-       /* And unblock it again */<br>
-       pthread_sigmask(SIG_SETMASK, &old, NULL);<br>
-<br>
-       return ret;<br>
+       return mpath_send_cmd(fd, buf);<br>
 }<br>
<br>
 /*<br>
diff --git a/multipathd/main.c b/multipathd/main.c<br>
index 54abfef..2be6cb2 100644<br>
--- a/multipathd/main.c<br>
+++ b/multipathd/main.c<br>
@@ -2125,18 +2125,12 @@ sigusr2 (int sig)<br>
 static void<br>
 signal_init(void)<br>
 {<br>
-       sigset_t set;<br>
-<br>
-       sigemptyset(&set);<br>
-       sigaddset(&set, SIGPIPE);<br>
-       pthread_sigmask(SIG_SETMASK, &set, NULL);<br>
-<br>
        signal_set(SIGHUP, sighup);<br>
        signal_set(SIGUSR1, sigusr1);<br>
        signal_set(SIGUSR2, sigusr2);<br>
        signal_set(SIGINT, sigend);<br>
        signal_set(SIGTERM, sigend);<br>
-       signal(SIGPIPE, SIG_IGN);<br>
+       signal_set(SIGPIPE, sigend);<br>
 }<br>
<br>
 static void<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.9.2<br>
<br>
<br>
</font></span></blockquote></div><br></div>