[mpich2-commits] r7490 - in mpich2/trunk/src/pm/hydra: tools/demux ui/mpich utils/signals

balaji at mcs.anl.gov balaji at mcs.anl.gov
Wed Nov 24 00:45:33 CST 2010


Author: balaji
Date: 2010-11-24 00:45:33 -0600 (Wed, 24 Nov 2010)
New Revision: 7490

Modified:
   mpich2/trunk/src/pm/hydra/tools/demux/demux.c
   mpich2/trunk/src/pm/hydra/tools/demux/demux_internal.h
   mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c
   mpich2/trunk/src/pm/hydra/tools/demux/demux_select.c
   mpich2/trunk/src/pm/hydra/ui/mpich/mpiexec.c
   mpich2/trunk/src/pm/hydra/utils/signals/signals.c
Log:
Fixes to the stdin reading code. Only when stdin is attached to a
terminal, and the process is running in the background, discard stdin.

Modified: mpich2/trunk/src/pm/hydra/tools/demux/demux.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/demux/demux.c	2010-11-24 06:45:15 UTC (rev 7489)
+++ mpich2/trunk/src/pm/hydra/tools/demux/demux.c	2010-11-24 06:45:33 UTC (rev 7490)
@@ -10,7 +10,23 @@
 int HYDT_dmxu_num_cb_fds = 0;
 struct HYDT_dmxu_callback *HYDT_dmxu_cb_list = NULL;
 struct HYDT_dmxu_fns HYDT_dmxu_fns = { 0 };
+int HYDT_dmxu_got_sigttin = 0;
 
+#if defined(SIGTTIN) && defined(HAVE_ISATTY)
+static void signal_cb(int sig)
+{
+    HYDU_FUNC_ENTER();
+
+    if (sig == SIGTTIN) {
+        HYDT_dmxu_got_sigttin = 1;
+    }
+    /* Ignore all other signals */
+
+    HYDU_FUNC_EXIT();
+    return;
+}
+#endif /* SIGTTIN and HAVE_ISATTY */
+
 HYD_status HYDT_dmx_init(char **demux)
 {
     HYD_status status = HYD_SUCCESS;
@@ -47,6 +63,13 @@
                             "cannot find an appropriate demux engine\n");
     }
 
+#if defined(SIGTTIN) && defined(HAVE_ISATTY)
+    if (isatty(STDIN_FILENO)) {
+        status = HYDU_set_signal(SIGTTIN, signal_cb);
+        HYDU_ERR_POP(status, "unable to set SIGTTIN\n");
+    }
+#endif /* SIGTTIN and HAVE_ISATTY */
+
   fn_exit:
     HYDU_FUNC_EXIT();
     return status;

Modified: mpich2/trunk/src/pm/hydra/tools/demux/demux_internal.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/demux/demux_internal.h	2010-11-24 06:45:15 UTC (rev 7489)
+++ mpich2/trunk/src/pm/hydra/tools/demux/demux_internal.h	2010-11-24 06:45:33 UTC (rev 7490)
@@ -22,6 +22,7 @@
 
 extern int HYDT_dmxu_num_cb_fds;
 extern struct HYDT_dmxu_callback *HYDT_dmxu_cb_list;
+extern int HYDT_dmxu_got_sigttin;
 
 struct HYDT_dmxu_fns {
     HYD_status(*wait_for_event) (int wtime);

Modified: mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c	2010-11-24 06:45:15 UTC (rev 7489)
+++ mpich2/trunk/src/pm/hydra/tools/demux/demux_poll.c	2010-11-24 06:45:33 UTC (rev 7490)
@@ -127,7 +127,7 @@
      * read() call to return an error (with errno == EINTR) when we
      * are not attached to the terminal. */
     ret = read(STDIN_FILENO, NULL, 0);
-    if (ret < 0 && errno == EINTR)
+    if (ret < 0 && errno == EINTR && HYDT_dmxu_got_sigttin)
         *out = 0;
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/tools/demux/demux_select.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/demux/demux_select.c	2010-11-24 06:45:15 UTC (rev 7489)
+++ mpich2/trunk/src/pm/hydra/tools/demux/demux_select.c	2010-11-24 06:45:33 UTC (rev 7490)
@@ -120,7 +120,7 @@
      * read() call to return an error (with errno == EINTR) when we
      * are not attached to the terminal. */
     ret = read(STDIN_FILENO, NULL, 0);
-    if (ret < 0 && errno == EINTR)
+    if (ret < 0 && errno == EINTR && HYDT_dmxu_got_sigttin)
         *out = 0;
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/ui/mpich/mpiexec.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpich/mpiexec.c	2010-11-24 06:45:15 UTC (rev 7489)
+++ mpich2/trunk/src/pm/hydra/ui/mpich/mpiexec.c	2010-11-24 06:45:33 UTC (rev 7490)
@@ -143,7 +143,7 @@
         cmd = HYD_CKPOINT;
         HYDU_sock_write(HYD_handle.cleanup_pipe[1], &cmd, sizeof(cmd), &sent, &closed);
     }
-    /* Ignore all other signals, including SIGTTIN */
+    /* Ignore all other signals */
 
     HYDU_FUNC_EXIT();
     return;

Modified: mpich2/trunk/src/pm/hydra/utils/signals/signals.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/signals/signals.c	2010-11-24 06:45:15 UTC (rev 7489)
+++ mpich2/trunk/src/pm/hydra/utils/signals/signals.c	2010-11-24 06:45:33 UTC (rev 7490)
@@ -59,11 +59,6 @@
     status = HYDU_set_signal(SIGALRM, handler);
     HYDU_ERR_POP(status, "unable to set SIGALRM\n");
 
-#ifdef SIGTTIN
-    status = HYDU_set_signal(SIGTTIN, handler);
-    HYDU_ERR_POP(status, "unable to set SIGTTIN\n");
-#endif /* SIGTTIN */
-
   fn_exit:
     HYDU_FUNC_EXIT();
     return status;



More information about the mpich2-commits mailing list