[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