[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