[mpich2-commits] r7737 - in mpich2/trunk/src/pm/hydra: tools/demux utils/sock

balaji at mcs.anl.gov balaji at mcs.anl.gov
Tue Jan 18 13:56:00 CST 2011


Author: balaji
Date: 2011-01-18 13:56:00 -0600 (Tue, 18 Jan 2011)
New Revision: 7737

Modified:
   mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c
   mpich2/trunk/src/pm/hydra/utils/sock/sock.c
Log:
Handle socket errors during process faults. Fixes ticket #1164.

Modified: mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c	2011-01-18 19:55:59 UTC (rev 7736)
+++ mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c	2011-01-18 19:56:00 UTC (rev 7737)
@@ -67,7 +67,8 @@
                     events |= HYD_POLLHUP;
 
                 /* We only understand POLLIN/OUT/HUP */
-                HYDU_ASSERT(!(pollfds[i].revents & ~POLLIN & ~POLLOUT & ~POLLHUP), status);
+                HYDU_ASSERT(!(pollfds[i].revents & ~POLLIN & ~POLLOUT & ~POLLHUP & ~POLLERR),
+                            status);
 
                 if (run->callback == NULL)
                     HYDU_ERR_POP(status, "no registered callback found for socket\n");

Modified: mpich2/trunk/src/pm/hydra/utils/sock/sock.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/sock/sock.c	2011-01-18 19:55:59 UTC (rev 7736)
+++ mpich2/trunk/src/pm/hydra/utils/sock/sock.c	2011-01-18 19:56:00 UTC (rev 7737)
@@ -205,12 +205,15 @@
     while (1) {
         do {
             tmp = read(fd, (char *) buf + *recvd, maxlen - *recvd);
-            if (tmp < 0 && errno == EINTR && fd == STDIN_FILENO) {
-                /* If we get an EINTR on stdin, set the socket to be
-                 * closed and jump out */
-                *closed = 1;
-                status = HYD_SUCCESS;
-                goto fn_exit;
+            if (tmp < 0) {
+                if ((errno == ECONNRESET) || (errno == EINTR && fd == STDIN_FILENO)) {
+                    /* If the remote end closed the socket or if we
+                     * get an EINTR on stdin, set the socket to be
+                     * closed and jump out */
+                    *closed = 1;
+                    status = HYD_SUCCESS;
+                    goto fn_exit;
+                }
             }
         } while (tmp < 0 && errno == EINTR);
 



More information about the mpich2-commits mailing list