[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