[mpich2-commits] r3996 - in mpich2/trunk/src/pm/hydra: control/consys launcher/mpiexec pm/central utils/env utils/launch utils/sock
balaji at mcs.anl.gov
balaji at mcs.anl.gov
Tue Mar 10 03:24:14 CDT 2009
Author: balaji
Date: 2009-03-10 03:24:14 -0500 (Tue, 10 Mar 2009)
New Revision: 3996
Modified:
mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c
mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c
mpich2/trunk/src/pm/hydra/pm/central/proxy.c
mpich2/trunk/src/pm/hydra/pm/central/proxy_cb.c
mpich2/trunk/src/pm/hydra/utils/env/env.c
mpich2/trunk/src/pm/hydra/utils/launch/launch.c
mpich2/trunk/src/pm/hydra/utils/sock/sock.c
Log:
Several bug fixes for the stdin management code.
Modified: mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c 2009-03-10 05:26:18 UTC (rev 3995)
+++ mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c 2009-03-10 08:24:14 UTC (rev 3996)
@@ -64,7 +64,7 @@
handle.stdin_buf_count = 0;
handle.stdin_buf_offset = 0;
- status = HYD_DMX_Register_fd(1, &stdin_fd, HYD_STDOUT, handle.stdin_cb);
+ status = HYD_DMX_Register_fd(1, &stdin_fd, HYD_STDIN, handle.stdin_cb);
if (status != HYD_SUCCESS) {
HYDU_Error_printf("demux engine returned error when registering fd\n");
goto fn_fail;
Modified: mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c
===================================================================
--- mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c 2009-03-10 05:26:18 UTC (rev 3995)
+++ mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c 2009-03-10 08:24:14 UTC (rev 3996)
@@ -83,7 +83,7 @@
HYDU_FUNC_ENTER();
- status = HYDU_Sock_stdin_cb(fd, events, handle.stdin_tmp_buf,
+ status = HYDU_Sock_stdin_cb(handle.in, events, handle.stdin_tmp_buf,
&handle.stdin_buf_count, &handle.stdin_buf_offset, &closed);
if (status != HYD_SUCCESS) {
HYDU_Error_printf("sock stdin callback returned an error\n");
@@ -97,6 +97,10 @@
HYDU_Error_printf("socket close error on fd: %d (errno: %d)\n", fd, errno);
goto fn_fail;
}
+
+ /* Close the input handler for the process, so it knows that
+ * we got a close event */
+ close(handle.in);
}
fn_exit:
Modified: mpich2/trunk/src/pm/hydra/pm/central/proxy.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/proxy.c 2009-03-10 05:26:18 UTC (rev 3995)
+++ mpich2/trunk/src/pm/hydra/pm/central/proxy.c 2009-03-10 08:24:14 UTC (rev 3996)
@@ -16,7 +16,7 @@
int main(int argc, char **argv)
{
int i, j, arg, high_port, low_port, port, sockets_open;
- int HYD_Proxy_listenfd;
+ int HYD_Proxy_listenfd, stdin_fd;
char *port_range, *port_str, *str;
HYD_Env_t *env, pmi;
char *client_args[HYD_EXEC_ARGS];
@@ -123,10 +123,31 @@
goto fn_fail;
}
- /* FIXME: Handle stdin */
- HYD_Proxy_params.stdin_buf_offset = 0;
- HYD_Proxy_params.stdin_buf_count = 0;
+ if (HYD_Proxy_params.pmi_id == 0) {
+ status = HYDU_Sock_set_nonblock(HYD_Proxy_params.in);
+ if (status != HYD_SUCCESS) {
+ HYDU_Error_printf("Unable to set socket as non-blocking\n");
+ status = HYD_SOCK_ERROR;
+ goto fn_fail;
+ }
+ stdin_fd = 0;
+ status = HYDU_Sock_set_nonblock(stdin_fd);
+ if (status != HYD_SUCCESS) {
+ HYDU_Error_printf("Unable to set socket as non-blocking\n");
+ status = HYD_SOCK_ERROR;
+ goto fn_fail;
+ }
+
+ HYD_Proxy_params.stdin_buf_offset = 0;
+ HYD_Proxy_params.stdin_buf_count = 0;
+ status = HYD_DMX_Register_fd(1, &stdin_fd, HYD_STDIN, HYD_Proxy_stdin_cb);
+ if (status != HYD_SUCCESS) {
+ HYDU_Error_printf("demux engine returned error when registering fd\n");
+ goto fn_fail;
+ }
+ }
+
while (1) {
/* Wait for some event to occur */
status = HYD_DMX_Wait_for_event();
Modified: mpich2/trunk/src/pm/hydra/pm/central/proxy_cb.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/proxy_cb.c 2009-03-10 05:26:18 UTC (rev 3995)
+++ mpich2/trunk/src/pm/hydra/pm/central/proxy_cb.c 2009-03-10 08:24:14 UTC (rev 3996)
@@ -153,9 +153,9 @@
HYDU_FUNC_ENTER();
- status = HYDU_Sock_stdin_cb(fd, events, HYD_Proxy_params.stdin_tmp_buf,
+ status = HYDU_Sock_stdin_cb(HYD_Proxy_params.in, events, HYD_Proxy_params.stdin_tmp_buf,
&HYD_Proxy_params.stdin_buf_count,
- &HYD_Proxy_params.stdin_buf_count, &closed);
+ &HYD_Proxy_params.stdin_buf_offset, &closed);
if (status != HYD_SUCCESS) {
HYDU_Error_printf("sock stdin callback error\n");
goto fn_fail;
@@ -169,8 +169,10 @@
goto fn_fail;
}
- if (HYD_Proxy_params.in == fd)
- HYD_Proxy_params.in = -1;
+ close(HYD_Proxy_params.in);
+ close(fd);
+
+ HYD_Proxy_params.in = -1;
}
fn_exit:
Modified: mpich2/trunk/src/pm/hydra/utils/env/env.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/env/env.c 2009-03-10 05:26:18 UTC (rev 3995)
+++ mpich2/trunk/src/pm/hydra/utils/env/env.c 2009-03-10 08:24:14 UTC (rev 3996)
@@ -252,7 +252,7 @@
i = 0;
tmp[i++] = MPIU_Strdup(env.env_name);
tmp[i++] = MPIU_Strdup("=");
- tmp[i++] = MPIU_Strdup(env.env_value);
+ tmp[i++] = env.env_value ? MPIU_Strdup(env.env_value) : MPIU_Strdup("");
tmp[i++] = NULL;
HYDU_STR_ALLOC_AND_JOIN(tmp, env_str, status);
Modified: mpich2/trunk/src/pm/hydra/utils/launch/launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/launch/launch.c 2009-03-10 05:26:18 UTC (rev 3995)
+++ mpich2/trunk/src/pm/hydra/utils/launch/launch.c 2009-03-10 08:24:14 UTC (rev 3996)
@@ -54,9 +54,9 @@
goto fn_fail;
}
+ close(inpipe[1]);
+ close(0);
if (in != NULL) {
- close(inpipe[1]);
- close(0);
if (dup2(inpipe[0], 0) < 0) {
HYDU_Error_printf("dup2 error (errno: %d)\n", errno);
status = HYD_SOCK_ERROR;
Modified: mpich2/trunk/src/pm/hydra/utils/sock/sock.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/sock/sock.c 2009-03-10 05:26:18 UTC (rev 3995)
+++ mpich2/trunk/src/pm/hydra/utils/sock/sock.c 2009-03-10 08:24:14 UTC (rev 3996)
@@ -451,8 +451,8 @@
*closed = 0;
- if (events & HYD_STDIN) {
- HYDU_Error_printf("stdin handler got a writeable event on local stdin: %d\n", events);
+ if (events & HYD_STDOUT) {
+ HYDU_Error_printf("stdin handler got an stdout event\n");
status = HYD_INTERNAL_ERROR;
goto fn_fail;
}
More information about the mpich2-commits
mailing list