[mpich2-commits] r4087 - in mpich2/trunk/src/pm/hydra: bootstrap/fork bootstrap/src bootstrap/ssh control/consys demux include launcher/mpiexec launcher/utils pm/central pm/utils utils/args utils/env utils/launch utils/signals utils/sock utils/string

balaji at mcs.anl.gov balaji at mcs.anl.gov
Mon Mar 16 10:02:00 CDT 2009


Author: balaji
Date: 2009-03-16 10:02:00 -0500 (Mon, 16 Mar 2009)
New Revision: 4087

Modified:
   mpich2/trunk/src/pm/hydra/bootstrap/fork/fork_launch.c
   mpich2/trunk/src/pm/hydra/bootstrap/src/bsci_init.c.in
   mpich2/trunk/src/pm/hydra/bootstrap/ssh/ssh_launch.c
   mpich2/trunk/src/pm/hydra/control/consys/consys_close.c
   mpich2/trunk/src/pm/hydra/control/consys/consys_finalize.c
   mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c
   mpich2/trunk/src/pm/hydra/control/consys/consys_wait.c
   mpich2/trunk/src/pm/hydra/demux/demux.c
   mpich2/trunk/src/pm/hydra/include/hydra_base.h
   mpich2/trunk/src/pm/hydra/include/hydra_utils.h
   mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c
   mpich2/trunk/src/pm/hydra/launcher/mpiexec/mpiexec.c
   mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c
   mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c
   mpich2/trunk/src/pm/hydra/pm/central/central_cb.c
   mpich2/trunk/src/pm/hydra/pm/central/central_finalize.c
   mpich2/trunk/src/pm/hydra/pm/central/central_launch.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/pm/central/proxy_utils.c
   mpich2/trunk/src/pm/hydra/pm/utils/pmi.c
   mpich2/trunk/src/pm/hydra/utils/args/args.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/signals/signals.c
   mpich2/trunk/src/pm/hydra/utils/sock/sock.c
   mpich2/trunk/src/pm/hydra/utils/string/string.c
Log:
Converted the error checks to the MPICH2 style check-and-pop macros.


Modified: mpich2/trunk/src/pm/hydra/bootstrap/fork/fork_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/bootstrap/fork/fork_launch.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/bootstrap/fork/fork_launch.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -41,10 +41,7 @@
              * for everyone else, it's NULL. */
             status = HYDU_Create_process(client_arg, (process_id == 0 ? &handle.in : NULL),
                                          &partition->out, &partition->err, &partition->pid);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("bootstrap spawn process returned error\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "create process returned error\n");
 
             for (arg = 0; client_arg[arg]; arg++)
                 HYDU_FREE(client_arg[arg]);

Modified: mpich2/trunk/src/pm/hydra/bootstrap/src/bsci_init.c.in
===================================================================
--- mpich2/trunk/src/pm/hydra/bootstrap/src/bsci_init.c.in	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/bootstrap/src/bsci_init.c.in	2009-03-16 15:02:00 UTC (rev 4087)
@@ -33,18 +33,14 @@
         }
     }
 
-    if (HYD_BSCI_comp_array[i] == NULL) {
-        HYDU_Error_printf("unrecognized bootstrap server: %s\n", bootstrap);
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (HYD_BSCI_comp_array[i] == NULL)
+        HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                             "unrecognized bootstrap server: %s\n", bootstrap);
 
-    if (HYD_BSCI_fns.launch_procs == NULL) {
-        /* This function is mandatory */
-        HYDU_Error_printf("Mandatory bootstrap launch function undefined\n");
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    /* This function is mandatory */
+    if (HYD_BSCI_fns.launch_procs == NULL)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
+                            "mandatory bootstrap launch function undefined\n");
     if (HYD_BSCI_fns.get_usize == NULL)
         HYD_BSCI_fns.get_usize = HYD_BSCU_get_usize;
     if (HYD_BSCI_fns.wait_for_completion == NULL)

Modified: mpich2/trunk/src/pm/hydra/bootstrap/ssh/ssh_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/bootstrap/ssh/ssh_launch.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/bootstrap/ssh/ssh_launch.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -61,10 +61,7 @@
              * for everyone else, it's NULL. */
             status = HYDU_Create_process(client_arg, (process_id == 0 ? &handle.in : NULL),
                                          &partition->out, &partition->err, &partition->pid);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("bootstrap spawn process returned error\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "create process returned error\n");
 
             for (arg = 0; client_arg[arg]; arg++)
                 HYDU_FREE(client_arg[arg]);

Modified: mpich2/trunk/src/pm/hydra/control/consys/consys_close.c
===================================================================
--- mpich2/trunk/src/pm/hydra/control/consys/consys_close.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/control/consys/consys_close.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -22,11 +22,7 @@
 
     /* Deregister the FD with the demux engine and close it. */
     status = HYD_DMX_Deregister_fd(fd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("demux engine returned error when deregistering fd: %d\n", fd);
-        goto fn_fail;
-    }
-
+    HYDU_ERR_SETANDJUMP1(status, status, "error deregistering fd %d\n", fd);
     close(fd);
 
     /* Find the FD in the handle and remove it. */

Modified: mpich2/trunk/src/pm/hydra/control/consys/consys_finalize.c
===================================================================
--- mpich2/trunk/src/pm/hydra/control/consys/consys_finalize.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/control/consys/consys_finalize.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -16,16 +16,10 @@
     HYDU_FUNC_ENTER();
 
     status = HYD_PMCI_Finalize();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("process manager finalize returned an error\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error returned from PM finalize\n");
 
     status = HYD_DMX_Finalize();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("demux engine finalize returned an error\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error returned from demux finalize\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();

Modified: mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/control/consys/consys_launch.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -22,53 +22,33 @@
     HYDU_FUNC_ENTER();
 
     status = HYD_PMCI_Launch_procs();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("process manager returned error when launching processes\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "PM returned error while launching processes\n");
 
     for (proc_params = handle.proc_params; proc_params; proc_params = proc_params->next) {
         for (partition = proc_params->partition; partition; partition = partition->next) {
             status =
                 HYD_DMX_Register_fd(1, &partition->out, HYD_STDOUT, proc_params->stdout_cb);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("demux engine returned error when registering fd\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "demux returned error registering fd\n");
 
             status =
                 HYD_DMX_Register_fd(1, &partition->err, HYD_STDOUT, proc_params->stderr_cb);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("demux engine returned error when registering fd\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "demux returned error registering fd\n");
         }
     }
 
     if (handle.in != -1) {      /* Only process_id 0 */
         status = HYDU_Sock_set_nonblock(handle.in);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("Unable to set socket as non-blocking\n");
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to set socket as non-blocking\n");
 
         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;
-        }
+        HYDU_ERR_POP(status, "unable to set socket as non-blocking\n");
 
         handle.stdin_buf_count = 0;
         handle.stdin_buf_offset = 0;
 
         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;
-        }
+        HYDU_ERR_POP(status, "demux returned error registering fd\n");
     }
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/control/consys/consys_wait.c
===================================================================
--- mpich2/trunk/src/pm/hydra/control/consys/consys_wait.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/control/consys/consys_wait.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -24,10 +24,7 @@
     while (1) {
         /* Wait for some event to occur */
         status = HYD_DMX_Wait_for_event(HYDU_Time_left(handle.start, handle.timeout));
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when waiting for event\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "error waiting for event\n");
 
         /* Check to see if there's any open read socket left; if there
          * are, we will just wait for more events. */
@@ -49,10 +46,7 @@
         /* Make sure all the processes have terminated. The process
          * manager control device will take care of that. */
         status = HYD_PMCI_Wait_for_completion();
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("process manager returned error when waiting for completion\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "error waiting for completion\n");
 
         /* We are done */
         break;

Modified: mpich2/trunk/src/pm/hydra/demux/demux.c
===================================================================
--- mpich2/trunk/src/pm/hydra/demux/demux.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/demux/demux.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -30,13 +30,10 @@
 
     HYDU_FUNC_ENTER();
 
-    for (i = 0; i < num_fds; i++) {
-        if (fd[i] < 0) {
-            HYDU_Error_printf("registering bad fd %d\n", fd[i]);
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
-    }
+    for (i = 0; i < num_fds; i++)
+        if (fd[i] < 0)
+            HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR, "registering bad fd %d\n",
+                                 fd[i]);
 
     HYDU_MALLOC(cb_element, HYD_DMXI_Callback_t *, sizeof(HYD_DMXI_Callback_t), status);
     cb_element->num_fds = num_fds;
@@ -88,9 +85,8 @@
     }
 
     /* FD is not found */
-    HYDU_Error_printf("couldn't find the fd to deregister: %d\n", fd);
-    status = HYD_INTERNAL_ERROR;
-    goto fn_fail;
+    HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                         "could not find fd to deregister: %d\n", fd);
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -143,9 +139,7 @@
                 status = HYD_SUCCESS;
                 goto fn_exit;
             }
-            HYDU_Error_printf("poll error (errno: %d)\n", errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
+            HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "poll error (errno: %d)\n", errno);
         }
         break;
     }
@@ -165,10 +159,7 @@
                     events |= HYD_STDOUT;
 
                 status = run->callback(pollfds[i].fd, events);
-                if (status != HYD_SUCCESS) {
-                    HYDU_Error_printf("callback returned error status\n", errno);
-                    goto fn_fail;
-                }
+                HYDU_ERR_POP(status, "callback returned error status\n");
             }
 
             i++;

Modified: mpich2/trunk/src/pm/hydra/include/hydra_base.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra_base.h	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/include/hydra_base.h	2009-03-16 15:02:00 UTC (rev 4087)
@@ -67,6 +67,57 @@
     HYD_INTERNAL_ERROR
 } HYD_Status;
 
+#define HYDU_ERR_POP(status, message)                                   \
+    {                                                                   \
+        if (status != HYD_SUCCESS && status != HYD_GRACEFUL_ABORT) {    \
+            if (message)                                                \
+                HYDU_Error_printf(message);                             \
+            goto fn_fail;                                               \
+        }                                                               \
+        else if (status == HYD_GRACEFUL_ABORT) {                        \
+            goto fn_exit;                                               \
+        }                                                               \
+    }
+
+#define HYDU_ERR_SETANDJUMP(status, error, message)                     \
+    {                                                                   \
+        status = error;                                                 \
+        if (status != HYD_SUCCESS && status != HYD_GRACEFUL_ABORT) {    \
+            if (message)                                                \
+                HYDU_Error_printf(message);                             \
+            goto fn_fail;                                               \
+        }                                                               \
+        else if (status == HYD_GRACEFUL_ABORT) {                        \
+            goto fn_exit;                                               \
+        }                                                               \
+    }
+
+#define HYDU_ERR_SETANDJUMP1(status, error, message, arg1)              \
+    {                                                                   \
+        status = error;                                                 \
+        if (status != HYD_SUCCESS && status != HYD_GRACEFUL_ABORT) {    \
+            if (message)                                                \
+                HYDU_Error_printf(message, arg1);                       \
+            goto fn_fail;                                               \
+        }                                                               \
+        else if (status == HYD_GRACEFUL_ABORT) {                        \
+            goto fn_exit;                                               \
+        }                                                               \
+    }
+
+#define HYDU_ERR_SETANDJUMP2(status, error, message, arg1, arg2)        \
+    {                                                                   \
+        status = error;                                                 \
+        if (status != HYD_SUCCESS && status != HYD_GRACEFUL_ABORT) {    \
+            if (message)                                                \
+                HYDU_Error_printf(message, arg1, arg2);                 \
+            goto fn_fail;                                               \
+        }                                                               \
+        else if (status == HYD_GRACEFUL_ABORT) {                        \
+            goto fn_exit;                                               \
+        }                                                               \
+    }
+
 #define HYD_STDOUT  (1)
 #define HYD_STDIN   (2)
 

Modified: mpich2/trunk/src/pm/hydra/include/hydra_utils.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra_utils.h	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/include/hydra_utils.h	2009-03-16 15:02:00 UTC (rev 4087)
@@ -78,11 +78,10 @@
 #define HYDU_MALLOC(p, type, size, status)                              \
     {                                                                   \
         (p) = (type) MPIU_Malloc((size));                               \
-        if ((p) == NULL) {                                              \
-            HYDU_Error_printf("failed trying to allocate %d bytes\n", (size)); \
-            (status) = HYD_NO_MEM;                                      \
-            goto fn_fail;                                               \
-        }                                                               \
+        if ((p) == NULL)                                                \
+            HYDU_ERR_SETANDJUMP1((status), HYD_NO_MEM,                  \
+                                 "failed to allocate %d bytes\n",       \
+                                 (size));                               \
     }
 
 #define HYDU_FREE(p)                            \
@@ -93,11 +92,9 @@
 #define HYDU_STRDUP(src, dest, type, status)                            \
     {                                                                   \
         (dest) = (type) MPIU_Strdup((src));                             \
-        if ((dest) == NULL) {                                           \
-            HYDU_Error_printf("failed duping string %s\n", (src));      \
-            (status) = HYD_INTERNAL_ERROR;                              \
-            goto fn_fail;                                               \
-        }                                                               \
+        if ((dest) == NULL)                                             \
+            HYDU_ERR_SETANDJUMP1((status), HYD_INTERNAL_ERROR,          \
+                             "failed duping string %s\n", (src));       \
     }
 
 HYD_Status HYDU_String_alloc_and_join(char **strlist, char **strjoin);

Modified: mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c
===================================================================
--- mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/launcher/mpiexec/callback.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -20,17 +20,13 @@
 
     /* Write output to fd 1 */
     status = HYDU_Sock_stdout_cb(fd, events, 1, &closed);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("socket stdout callback error on fd: %d (errno: %d)\n", fd, errno);
-        goto fn_fail;
-    }
+    HYDU_ERR_SETANDJUMP2(status, status, "stdout callback error on fd %d (errno: %d)\n",
+                         fd, errno);
 
     if (closed) {
         status = HYD_CSI_Close_fd(fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("socket close error on fd: %d (errno: %d)\n", fd, errno);
-            goto fn_fail;
-        }
+        HYDU_ERR_SETANDJUMP2(status, status, "socket close error on fd %d (errno: %d)\n",
+                             fd, errno);
         goto fn_exit;
     }
 
@@ -52,17 +48,13 @@
 
     /* Write output to fd 2 */
     status = HYDU_Sock_stdout_cb(fd, events, 2, &closed);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("socket stdout callback error on fd: %d (errno: %d)\n", fd, errno);
-        goto fn_fail;
-    }
+    HYDU_ERR_SETANDJUMP2(status, status, "stdout callback error on %d (errno: %d)\n",
+                         fd, errno)
 
     if (closed) {
         status = HYD_CSI_Close_fd(fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("socket close error on fd: %d (errno: %d)\n", fd, errno);
-            goto fn_fail;
-        }
+        HYDU_ERR_SETANDJUMP2(status, status, "socket close error on fd %d (errno: %d)\n",
+                             fd, errno);
         goto fn_exit;
     }
 
@@ -84,18 +76,12 @@
 
     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");
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "stdin callback error\n");
 
     if (closed) {
         status = HYD_CSI_Close_fd(fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("socket close error on fd: %d (errno: %d)\n", fd, errno);
-            goto fn_fail;
-        }
+        HYDU_ERR_SETANDJUMP2(status, status, "socket close error on fd %d (errno: %d)\n",
+                             fd, errno);
 
         /* Close the input handler for the process, so it knows that
          * we got a close event */

Modified: mpich2/trunk/src/pm/hydra/launcher/mpiexec/mpiexec.c
===================================================================
--- mpich2/trunk/src/pm/hydra/launcher/mpiexec/mpiexec.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/launcher/mpiexec/mpiexec.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -66,25 +66,16 @@
 
     if (handle.debug) {
         status = HYD_LCHI_Print_parameters();
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("unable to create host list\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, NULL);
     }
 
     /* Convert the host file to a host list */
     status = HYD_LCHU_Create_host_list();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to create host list\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to create host list\n");
 
     /* Consolidate the environment list that we need to propagate */
     status = HYD_LCHU_Create_env_list();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to create host list\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to create env list\n");
 
     proc_params = handle.proc_params;
     while (proc_params) {
@@ -104,18 +95,11 @@
 
     /* Launch the processes */
     status = HYD_CSI_Launch_procs();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("control system returned error when launching processes\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "control system error launching processes\n");
 
     /* Wait for their completion */
     status = HYD_CSI_Wait_for_completion();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf
-            ("control system returned error when waiting for process' completion\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "control system error waiting for completion\n");
 
     /* Check for the exit status for all the processes */
     exit_status = 0;
@@ -125,10 +109,7 @@
 
     /* Call finalize functions for lower layers to cleanup their resources */
     status = HYD_CSI_Finalize();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("control system returned error on finalize\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "control system error on finalize\n");
 
     /* Free the mpiexec params */
     HYD_LCHU_Free_params();

Modified: mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -63,10 +63,7 @@
 
     if (handle.proc_params == NULL) {
         status = allocate_proc_params(&handle.proc_params);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("unable to allocate proc_params\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to allocate proc_params\n");
     }
 
     proc_params = handle.proc_params;
@@ -106,123 +103,69 @@
     HYD_LCHU_Init_params();
 
     status = HYDU_Get_base_path(argv[0], &handle.base_path);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to get base path\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to get base path\n");
 
     status = HYDU_Env_global_list(&handle.global_env);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to get the global env list\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to get the global env list\n");
 
     while (--argc && ++argv) {
 
         status = HYDU_String_break(*argv, &str1, &str2);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("string break returned error\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "string break returned error\n");
 
-        /* Help options */
-        if (!strcmp(str1, "-h") || !strcmp(str1, "--help") || !strcmp(str1, "-help")) {
-            /* Just return from this function; the main code will show the usage */
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (!strcmp(str1, "-h") || !strcmp(str1, "--help") || !strcmp(str1, "-help"))
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, NULL);
 
-        /* Check what debug level is requested */
         if (!strcmp(str1, "--verbose")) {
-            /* Debug level already set */
-            if (handle.debug != -1) {
-                HYDU_Error_printf
-                    ("Duplicate debug level setting; previously set to %d\n", handle.debug);
-                status = HYD_INTERNAL_ERROR;
-                goto fn_fail;
-            }
+            if (handle.debug != -1)
+                HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate debug level\n");
             handle.debug = 1;
-
             continue;
         }
 
-        /* Version information */
         if (!strcmp(str1, "--version")) {
-            /* Just show the version information and continue. This
-             * option can be used in conjunction with other
-             * options. */
             show_version();
-            status = HYD_GRACEFUL_ABORT;
-            goto fn_fail;
+            HYDU_ERR_SETANDJUMP(status, HYD_GRACEFUL_ABORT, NULL);
         }
 
-        /* Bootstrap server */
         if (!strcmp(str1, "--bootstrap")) {
             if (!str2) {
                 CHECK_NEXT_ARG_VALID(status);
                 str2 = *argv;
             }
-
-            if (handle.bootstrap != NULL) {
-                HYDU_Error_printf("Duplicate bootstrap setting; previously set to %s\n",
-                                  handle.bootstrap);
-                status = HYD_INTERNAL_ERROR;
-                goto fn_fail;
-            }
-
+            if (handle.bootstrap != NULL)
+                HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate bootstrap\n");
             handle.bootstrap = MPIU_Strdup(str2);
             continue;
         }
 
-        /* Check if X forwarding is explicitly set */
         if (!strcmp(str1, "--enable-x") || !strcmp(str1, "--disable-x")) {
-            /* X forwarding already enabled or disabled */
-            if (handle.enablex != -1) {
-                HYDU_Error_printf
-                    ("Duplicate enable-x setting; previously set to %d\n", handle.enablex);
-                status = HYD_INTERNAL_ERROR;
-                goto fn_fail;
-            }
-
+            if (handle.enablex != -1)
+                HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate enable-x\n");
             handle.enablex = !strcmp(str1, "--enable-x");
             continue;
         }
 
-        /* Check if the proxy port is set */
         if (!strcmp(str1, "--proxy-port")) {
             if (!str2) {
                 CHECK_NEXT_ARG_VALID(status);
                 str2 = *argv;
             }
-
-            if (handle.proxy_port != -1) {
-                HYDU_Error_printf("Duplicate proxy port setting; previously set to %d\n",
-                                  handle.proxy_port);
-                status = HYD_INTERNAL_ERROR;
-                goto fn_fail;
-            }
-
+            if (handle.proxy_port != -1)
+                HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate proxy port\n");
             handle.proxy_port = atoi(str2);
             continue;
         }
 
-        /* Check what all environment variables need to be propagated */
         if (!strcmp(str1, "-genvall") || !strcmp(str1, "-genvnone") ||
             !strcmp(str1, "-genvlist")) {
-            /* propagation already set */
-            if (handle.prop != HYD_ENV_PROP_UNSET) {
-                HYDU_Error_printf
-                    ("Duplicate propagation setting; previously set to %d\n", handle.prop);
-                status = HYD_INTERNAL_ERROR;
-                goto fn_fail;
-            }
+            if (handle.prop != HYD_ENV_PROP_UNSET)
+                HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate prop setting\n");
 
-            if (!strcmp(str1, "-genvall")) {
+            if (!strcmp(str1, "-genvall"))
                 handle.prop = HYD_ENV_PROP_ALL;
-            }
-            else if (!strcmp(str1, "-genvnone")) {
+            else if (!strcmp(str1, "-genvnone"))
                 handle.prop = HYD_ENV_PROP_NONE;
-            }
             else if (!strcmp(str1, "-genvlist")) {
                 handle.prop = HYD_ENV_PROP_LIST;
 
@@ -234,45 +177,27 @@
                 env_name = strtok(str2, ",");
                 do {
                     status = HYDU_Env_create(&env, env_name, NULL);
-                    if (status != HYD_SUCCESS) {
-                        HYDU_Error_printf("unable to create env struct\n");
-                        goto fn_fail;
-                    }
+                    HYDU_ERR_POP(status, "unable to create env struct\n");
 
                     status = HYDU_Env_add_to_list(&handle.user_env, *env);
-                    if (status != HYD_SUCCESS) {
-                        HYDU_Error_printf("unable to add env to list\n");
-                        goto fn_fail;
-                    }
+                    HYDU_ERR_POP(status, "unable to add env to list\n");
                 } while ((env_name = strtok(NULL, ",")));
             }
             continue;
         }
 
-        /* Check what all environment variables need to be propagated */
         if (!strcmp(str1, "-envall") || !strcmp(str1, "-envnone") ||
             !strcmp(str1, "-envlist")) {
             status = get_current_proc_params(&proc_params);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("get_current_proc_params returned error\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "get_current_proc_params returned error\n");
 
-            /* propagation already set */
-            if (proc_params->prop != HYD_ENV_PROP_UNSET) {
-                HYDU_Error_printf
-                    ("Duplicate propagation setting; previously set to %d\n",
-                     proc_params->prop);
-                status = HYD_INTERNAL_ERROR;
-                goto fn_fail;
-            }
+            if (proc_params->prop != HYD_ENV_PROP_UNSET)
+                HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate prop setting\n");
 
-            if (!strcmp(str1, "-envall")) {
+            if (!strcmp(str1, "-envall"))
                 proc_params->prop = HYD_ENV_PROP_ALL;
-            }
-            else if (!strcmp(str1, "-envnone")) {
+            else if (!strcmp(str1, "-envnone"))
                 proc_params->prop = HYD_ENV_PROP_NONE;
-            }
             else if (!strcmp(str1, "-envlist")) {
                 proc_params->prop = HYD_ENV_PROP_LIST;
 
@@ -287,16 +212,10 @@
                         break;
 
                     status = HYDU_Env_create(&env, env_name, NULL);
-                    if (status != HYD_SUCCESS) {
-                        HYDU_Error_printf("unable to create env struct\n");
-                        goto fn_fail;
-                    }
+                    HYDU_ERR_POP(status, "unable to create env struct\n");
 
                     status = HYDU_Env_add_to_list(&proc_params->prop_env, *env);
-                    if (status != HYD_SUCCESS) {
-                        HYDU_Error_printf("unable to add env to list\n");
-                        goto fn_fail;
-                    }
+                    HYDU_ERR_POP(status, "unable to add env to list\n");
                 } while (env_name);
             }
             continue;
@@ -314,19 +233,13 @@
             env_value = MPIU_Strdup(*argv);
 
             status = HYDU_Env_create(&env, env_name, env_value);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("unable to create env struct\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to create env struct\n");
 
             if (!strcmp(str1, "-genv"))
                 HYDU_Env_add_to_list(&handle.user_env, *env);
             else {
                 status = get_current_proc_params(&proc_params);
-                if (status != HYD_SUCCESS) {
-                    HYDU_Error_printf("get_current_proc_params returned error\n");
-                    goto fn_fail;
-                }
+                HYDU_ERR_POP(status, "get_current_proc_params returned error\n");
 
                 HYDU_Env_add_to_list(&proc_params->user_env, *env);
             }
@@ -351,19 +264,10 @@
             }
 
             status = get_current_proc_params(&proc_params);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("get_current_proc_params returned error\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "get_current_proc_params returned error\n");
 
-            /* Num_procs already set */
-            if (proc_params->exec_proc_count != 0) {
-                HYDU_Error_printf
-                    ("Duplicate setting for number of processes; previously set to %d\n",
-                     proc_params->exec_proc_count);
-                status = HYD_INTERNAL_ERROR;
-                goto fn_fail;
-            }
+            if (proc_params->exec_proc_count != 0)
+                HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate proc count\n");
 
             proc_params->exec_proc_count = atoi(str2);
             continue;
@@ -378,26 +282,17 @@
             continue;
         }
 
-        if (*argv[0] == '-') {
-            HYDU_Error_printf("unrecognized argument\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (*argv[0] == '-')
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "unrecognized argument\n");
 
         status = get_current_proc_params(&proc_params);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("get_current_proc_params returned error\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "get_current_proc_params returned error\n");
 
         /* Read the executable till you hit the end of a ":" */
         do {
             if (!strcmp(*argv, ":")) {  /* Next executable */
                 status = allocate_proc_params(&proc_params->next);
-                if (status != HYD_SUCCESS) {
-                    HYDU_Error_printf("allocate_proc_params returned error\n");
-                    goto fn_fail;
-                }
+                HYDU_ERR_POP(status, "allocate_proc_params returned error\n");
                 break;
             }
 
@@ -414,25 +309,17 @@
         continue;
     }
 
-    /* Check on what's set and what's not */
     if (handle.debug == -1)
         handle.debug = 0;
 
-    /* We need at least one local exec */
-    if (handle.proc_params == NULL) {
-        HYDU_Error_printf("No local options set\n");
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (handle.proc_params == NULL)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "no local options set\n");
 
-    /* If wdir is not set, use the current one */
     if (handle.wdir == NULL) {
         HYDU_MALLOC(handle.wdir, char *, HYDRA_MAX_PATH, status);
-        if (getcwd(handle.wdir, HYDRA_MAX_PATH) == NULL) {
-            HYDU_Error_printf("allocated space is too small for absolute path\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (getcwd(handle.wdir, HYDRA_MAX_PATH) == NULL)
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
+                                "allocated space is too small for absolute path\n");
     }
 
     /*
@@ -459,27 +346,20 @@
 
     proc_params = handle.proc_params;
     while (proc_params) {
-        if (proc_params->exec[0] == NULL) {
-            HYDU_Error_printf("no executable specified\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (proc_params->exec[0] == NULL)
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "no executable specified\n");
 
         if (proc_params->exec_proc_count == 0)
             proc_params->exec_proc_count = 1;
 
-        if (handle.prop == HYD_ENV_PROP_UNSET && proc_params->prop == HYD_ENV_PROP_UNSET) {
-            /* By default we pass the entire environment */
+        if (handle.prop == HYD_ENV_PROP_UNSET && proc_params->prop == HYD_ENV_PROP_UNSET)
             proc_params->prop = HYD_ENV_PROP_ALL;
-        }
 
         proc_params = proc_params->next;
     }
 
-    /* If the proxy port is not set, set it to the default value */
-    if (handle.proxy_port == -1) {
+    if (handle.proxy_port == -1)
         handle.proxy_port = HYD_DEFAULT_PROXY_PORT;
-    }
 
   fn_exit:
     HYDU_FUNC_EXIT();

Modified: mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c
===================================================================
--- mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -125,11 +125,9 @@
 
     if (strcmp(handle.host_file, "HYDRA_USE_LOCALHOST")) {
         fp = fopen(handle.host_file, "r");
-        if (fp == NULL) {
-            HYDU_Error_printf("unable to open host file %s\n", handle.host_file);
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (fp == NULL)
+            HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                                 "unable to open host file: %s\n", handle.host_file);
     }
 
     HYDU_Debug("Partition list: ");
@@ -145,11 +143,9 @@
         else {
             total_procs = 0;
             while (!feof(fp)) {
-                if ((fscanf(fp, "%s", line) < 0) && errno) {
-                    HYDU_Error_printf("unable to read input line (errno: %d)\n", errno);
-                    status = HYD_INTERNAL_ERROR;
-                    goto fn_fail;
-                }
+                if ((fscanf(fp, "%s", line) < 0) && errno)
+                    HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                                         "unable to read input line (errno: %d)\n", errno);
                 if (feof(fp))
                     break;
 
@@ -267,10 +263,7 @@
         handle.prop_env = HYDU_Env_listdup(handle.global_env);
         for (env = handle.user_env; env; env = env->next) {
             status = HYDU_Env_add_to_list(&handle.prop_env, *env);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("unable to add env to list\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to add env to list\n");
         }
     }
     else if (handle.prop == HYD_ENV_PROP_LIST) {
@@ -278,10 +271,7 @@
             run = HYDU_Env_found_in_list(handle.global_env, *env);
             if (run) {
                 status = HYDU_Env_add_to_list(&handle.prop_env, *run);
-                if (status != HYD_SUCCESS) {
-                    HYDU_Error_printf("unable to add env to list\n");
-                    goto fn_fail;
-                }
+                HYDU_ERR_POP(status, "unable to add env to list\n");
             }
         }
     }
@@ -292,10 +282,7 @@
             proc_params->prop_env = HYDU_Env_listdup(handle.global_env);
             for (env = proc_params->user_env; env; env = env->next) {
                 status = HYDU_Env_add_to_list(&proc_params->prop_env, *env);
-                if (status != HYD_SUCCESS) {
-                    HYDU_Error_printf("unable to add env to list\n");
-                    goto fn_fail;
-                }
+                HYDU_ERR_POP(status, "unable to add env to list\n");
             }
         }
         else if (proc_params->prop == HYD_ENV_PROP_LIST) {
@@ -303,10 +290,7 @@
                 run = HYDU_Env_found_in_list(handle.global_env, *env);
                 if (run) {
                     status = HYDU_Env_add_to_list(&proc_params->prop_env, *run);
-                    if (status != HYD_SUCCESS) {
-                        HYDU_Error_printf("unable to add env to list\n");
-                        goto fn_fail;
-                    }
+                    HYDU_ERR_POP(status, "unable to add env to list\n");
                 }
             }
         }

Modified: mpich2/trunk/src/pm/hydra/pm/central/central_cb.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/central_cb.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/pm/central/central_cb.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -54,23 +54,14 @@
 
     if (fd == HYD_PMCD_Central_listenfd) {      /* Someone is trying to connect to us */
         status = HYDU_Sock_accept(fd, &accept_fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("sock utils returned error when accepting connection\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "accept error\n");
 
         status = HYD_DMX_Register_fd(1, &accept_fd, HYD_STDOUT, HYD_PMCD_Central_cb);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when registering fd\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to register fd\n");
     }
     else {
         status = HYDU_Sock_readline(fd, buf, HYD_TMPBUF_SIZE, &linelen);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("sock utils returned error when reading PMI line\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "PMI read line error\n");
 
         if (linelen == 0) {
             /* This is not a clean close. If a finalize was called, we
@@ -137,10 +128,7 @@
 
             if (status == HYD_SUCCESS) {
                 status = HYD_DMX_Deregister_fd(fd);
-                if (status != HYD_SUCCESS) {
-                    HYDU_Error_printf("unable to deregister fd %d\n", fd);
-                    goto fn_fail;
-                }
+                HYDU_ERR_POP(status, "unable to register fd\n");
                 close(fd);
             }
         }
@@ -159,10 +147,7 @@
             goto fn_fail;
         }
 
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("PMI server function returned an error\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "PMI server returned error\n");
     }
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/pm/central/central_finalize.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/central_finalize.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/pm/central/central_finalize.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -22,25 +22,16 @@
     /* Deregister the listen socket from the demux engine and close
      * it. */
     status = HYD_DMX_Deregister_fd(HYD_PMCD_Central_listenfd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("demux engine returned error when deregistering fd\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to deregister fd\n");
 
     close(HYD_PMCD_Central_listenfd);
     HYD_PMCD_Central_listenfd = -1;
 
     status = HYD_PMCU_Finalize();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to finalize process manager utils\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to finalize process manager utils\n");
 
     status = HYD_BSCI_finalize();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to finalize the bootstrap server\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to finalize bootstrap server\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();

Modified: mpich2/trunk/src/pm/hydra/pm/central/central_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/central_launch.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/pm/central/central_launch.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -50,10 +50,7 @@
     HYDU_FUNC_ENTER();
 
     status = HYDU_Set_common_signals(HYD_PMCD_Central_signal_cb);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("signal utils returned error when trying to set signal\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to set signal\n");
 
     /* Check if the user wants us to use a port within a certain
      * range. */
@@ -66,31 +63,22 @@
     /* Listen on a port in the port range */
     port = 0;
     status = HYDU_Sock_listen(&HYD_PMCD_Central_listenfd, port_range, &port);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned listen error\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to listen on port\n");
 
     /* Register the listening socket with the demux engine */
     status = HYD_DMX_Register_fd(1, &HYD_PMCD_Central_listenfd, HYD_STDOUT,
                                  HYD_PMCD_Central_cb);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("demux engine returned error for registering fd\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to register fd\n");
 
     /* Create a port string for MPI processes to use to connect to */
-    if (gethostname(hostname, MAX_HOSTNAME_LEN) < 0) {
-        HYDU_Error_printf("gethostname error (hostname: %s; errno: %d)\n", hostname, errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (gethostname(hostname, MAX_HOSTNAME_LEN) < 0)
+        HYDU_ERR_SETANDJUMP2(status, HYD_SOCK_ERROR,
+                             "gethostname error (hostname: %s; errno: %d)\n", hostname,
+                             errno);
 
     status = HYDU_String_int_to_str(port, &sport);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "cannot convert int to string\n");
+
     HYDU_MALLOC(port_str, char *, strlen(hostname) + 1 + strlen(sport) + 1, status);
     MPIU_Snprintf(port_str, strlen(hostname) + 1 + strlen(sport) + 1,
                   "%s:%s", hostname, sport);
@@ -98,25 +86,18 @@
     HYDU_Debug("Process manager listening on PMI port %s\n", port_str);
 
     status = HYDU_Env_create(&env, "PMI_PORT", port_str);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to create env\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to create env\n");
+
     status = HYDU_Env_add_to_list(&handle.system_env, *env);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to add env to list\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to add env to list\n");
+
     HYDU_Env_free(env);
     HYDU_FREE(port_str);
 
     /* Create a process group for the MPI processes in this
      * comm_world */
     status = HYD_PMCU_Create_pg();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("pm utils returned error creating process group\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to create process group\n");
 
     /* Create the arguments list for each proxy */
     process_id = 0;
@@ -138,20 +119,14 @@
             path_str[i++] = MPIU_Strdup("hydproxy");
             path_str[i] = NULL;
             status = HYDU_String_alloc_and_join(path_str, &partition->args[arg]);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("String utils returned error when joining strings\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to join strings\n");
             arg++;
 
             HYDU_Free_args(path_str);
 
             status = HYDU_String_int_to_str(partition->proc_count, &str);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf
-                    ("String utils returned error while converting int to string\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to convert int to string\n");
+
             partition->args[arg++] = MPIU_Strdup("--proc-count");
             partition->args[arg++] = MPIU_Strdup(str);
 
@@ -161,21 +136,15 @@
             HYDU_FREE(str);
 
             status = HYDU_String_int_to_str(process_id, &str);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf
-                    ("String utils returned error while converting int to string\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to convert int to string\n");
+
             partition->args[arg++] = MPIU_Strdup("--pmi-id");
             partition->args[arg++] = MPIU_Strdup(str);
             HYDU_FREE(str);
 
             status = HYDU_String_int_to_str(handle.proxy_port, &str);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf
-                    ("String utils returned error while converting int to string\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to convert in to string\n");
+
             partition->args[arg++] = MPIU_Strdup("--proxy-port");
             partition->args[arg++] = MPIU_Strdup(str);
             HYDU_FREE(str);
@@ -192,11 +161,8 @@
             for (env = proc_params->prop_env; env; env = env->next)
                 i++;
             status = HYDU_String_int_to_str(i, &str);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf
-                    ("String utils returned error while converting int to string\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to convert in to string\n");
+
             partition->args[arg++] = MPIU_Strdup(str);
             partition->args[arg++] = NULL;
 
@@ -220,16 +186,10 @@
     /* Initialize the bootstrap server and ask it to launch the
      * processes. */
     status = HYD_BSCI_init(handle.bootstrap);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("bootstrap server initialization failed\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "bootstrap server initialization failed\n");
 
     status = HYD_BSCI_launch_procs();
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("bootstrap server returned error launching processes\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "bootstrap server cannot launch processes\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -249,10 +209,7 @@
     status = HYD_BSCI_wait_for_completion();
     if (status != HYD_SUCCESS) {
         status = HYD_PMCD_Central_cleanup();
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("process manager device returned error for process cleanup\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "process manager cannot cleanup processes\n");
     }
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/pm/central/proxy.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/proxy.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/pm/central/proxy.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -22,25 +22,15 @@
     HYD_Status status = HYD_SUCCESS;
 
     status = HYD_Proxy_get_params(argc, argv);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("Bad parameters passed to the proxy\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "bad parameters passed to the proxy\n");
 
-    /* Listen on a port in the port range */
     status = HYDU_Sock_listen(&HYD_Proxy_listenfd, NULL,
                               (uint16_t *) & HYD_Proxy_params.proxy_port);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned listen error\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to listen on socket\n");
 
     /* Register the listening socket with the demux engine */
     status = HYD_DMX_Register_fd(1, &HYD_Proxy_listenfd, HYD_STDOUT, HYD_Proxy_listen_cb);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("demux engine returned error for registering fd\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to register fd\n");
 
     /* FIXME: We do not use the bootstrap server right now, as the
      * current implementation of the bootstrap launch directly reads
@@ -69,27 +59,20 @@
         j = 0;
         tmp[j++] = MPIU_Strdup("PMI_ID=");
         status = HYDU_String_int_to_str(HYD_Proxy_params.pmi_id + i, &str);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("string utils returned error while converting int to string\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to convert int to string\n");
+
         tmp[j++] = MPIU_Strdup(str);
         HYDU_FREE(str);
         tmp[j++] = NULL;
         status = HYDU_String_alloc_and_join(tmp, &str);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("string utils returned error while joining strings\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to join strings\n");
+
         HYDU_Env_putenv(str);
         for (j = 0; tmp[j]; j++)
             HYDU_FREE(tmp[j]);
 
         status = HYDU_Chdir(HYD_Proxy_params.wdir);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("unable to change to wdir %s\n", HYD_Proxy_params.wdir);
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to change wdir\n");
 
         for (j = 0, arg = 0; HYD_Proxy_params.args[j]; j++)
             client_args[arg++] = MPIU_Strdup(HYD_Proxy_params.args[j]);
@@ -105,10 +88,7 @@
                                          &HYD_Proxy_params.out[i],
                                          &HYD_Proxy_params.err[i], &HYD_Proxy_params.pid[i]);
         }
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("spawn process returned error\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "spawn process returned error\n");
 
         HYDU_FREE(str);
     }
@@ -116,40 +96,24 @@
     /* Everything is spawned, now wait for I/O */
     status = HYD_DMX_Register_fd(HYD_Proxy_params.proc_count, HYD_Proxy_params.out,
                                  HYD_STDOUT, HYD_Proxy_stdout_cb);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("demux engine returned error when registering fd\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to register fd\n");
+
     status = HYD_DMX_Register_fd(HYD_Proxy_params.proc_count, HYD_Proxy_params.err,
                                  HYD_STDOUT, HYD_Proxy_stderr_cb);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("demux engine returned error when registering fd\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to register fd\n");
 
     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;
-        }
+        HYDU_ERR_POP(status, "unable to set socket as non-blocking\n");
 
         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;
-        }
+        HYDU_ERR_POP(status, "unable to set socket as non-blocking\n");
 
         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;
-        }
+        HYDU_ERR_POP(status, "unable to register fd\n");
     }
 
     timeout_str = getenv("MPIEXEC_TIMEOUT");
@@ -161,10 +125,7 @@
     while (1) {
         /* Wait for some event to occur */
         status = HYD_DMX_Wait_for_event(timeout);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when waiting for event\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "demux engine error waiting for event\n");
 
         /* Check to see if there's any open read socket left; if there
          * are, we will just wait for more events. */
@@ -211,10 +172,7 @@
 
         /* Check if there are any messages from the launcher */
         status = HYD_DMX_Wait_for_event(0);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when waiting for event\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "demux engine error waiting for event\n");
     } while (1);
 
     ret_status = 0;

Modified: mpich2/trunk/src/pm/hydra/pm/central/proxy_cb.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/proxy_cb.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/pm/central/proxy_cb.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -21,39 +21,26 @@
 
     HYDU_FUNC_ENTER();
 
-    if (events & HYD_STDIN) {
-        HYDU_Error_printf("stdout handler got an stdin event: %d\n", events);
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (events & HYD_STDIN)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "stdout handler got stdin event\n");
 
     if (fd == HYD_Proxy_listenfd) {     /* mpiexec is trying to connect */
         status = HYDU_Sock_accept(fd, &accept_fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("sock utils returned error when accepting connection\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "accept error\n");
 
         status = HYD_DMX_Register_fd(1, &accept_fd, HYD_STDOUT, HYD_Proxy_listen_cb);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when registering fd\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to register fd\n");
     }
     else {      /* We got a command from mpiexec */
         count = read(fd, &cmd, HYD_TMPBUF_SIZE);
         if (count < 0) {
-            HYDU_Error_printf("socket read error on fd: %d (errno: %d)\n", fd, errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
+            HYDU_ERR_SETANDJUMP2(status, HYD_SOCK_ERROR, "read error on %d (errno: %d)\n",
+                                 fd, errno);
         }
         else if (count == 0) {
             /* The connection has closed */
             status = HYD_DMX_Deregister_fd(fd);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("demux engine returned error when deregistering fd\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to deregister fd\n");
             close(fd);
             goto fn_exit;
         }
@@ -64,16 +51,12 @@
                     kill(HYD_Proxy_params.pid[i], SIGKILL);
 
             status = HYD_DMX_Deregister_fd(fd);
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("demux engine returned error when deregistering fd\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "unable to register fd\n");
             close(fd);
         }
         else {
-            HYDU_Error_printf("got unrecognized command from mpiexec\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
+                                "got unrecognized command from mpiexec\n");
         }
     }
 
@@ -94,18 +77,12 @@
     HYDU_FUNC_ENTER();
 
     status = HYDU_Sock_stdout_cb(fd, events, 1, &closed);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock stdout callback error\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "stdout callback error\n");
 
     if (closed) {
         /* The connection has closed */
         status = HYD_DMX_Deregister_fd(fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when deregistering fd\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to deregister fd\n");
 
         for (i = 0; i < HYD_Proxy_params.proc_count; i++)
             if (HYD_Proxy_params.out[i] == fd)
@@ -129,18 +106,12 @@
     HYDU_FUNC_ENTER();
 
     status = HYDU_Sock_stdout_cb(fd, events, 2, &closed);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock stdout callback error\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "stdout callback error\n");
 
     if (closed) {
         /* The connection has closed */
         status = HYD_DMX_Deregister_fd(fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when deregistering fd\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to deregister fd\n");
 
         for (i = 0; i < HYD_Proxy_params.proc_count; i++)
             if (HYD_Proxy_params.err[i] == fd)
@@ -166,18 +137,12 @@
     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_offset, &closed);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock stdin callback error\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "stdin callback error\n");
 
     if (closed) {
         /* The connection has closed */
         status = HYD_DMX_Deregister_fd(fd);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("demux engine returned error when deregistering fd\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to deregister fd\n");
 
         close(HYD_Proxy_params.in);
         close(fd);

Modified: mpich2/trunk/src/pm/hydra/pm/central/proxy_utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/proxy_utils.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/pm/central/proxy_utils.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -24,10 +24,7 @@
     HYD_Proxy_params.partition = NULL;
 
     status = HYDU_Env_global_list(&HYD_Proxy_params.global_env);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to get the global env list\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to get the global env list\n");
 
     while (--argc && ++argv) {
 

Modified: mpich2/trunk/src/pm/hydra/pm/utils/pmi.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/utils/pmi.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/pm/utils/pmi.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -44,11 +44,7 @@
     (*pg)->process = NULL;
 
     status = allocate_kvs(&(*pg)->kvs, pgid);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("Unable to allocate kvs space\n");
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to allocate kvs space\n");
 
     (*pg)->next = NULL;
 
@@ -107,10 +103,7 @@
     }
 
     status = create_pg(&pg_list, 0);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to create pg\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to create pg\n");
     pg_list->num_procs = num_procs;
 
   fn_exit:
@@ -144,22 +137,13 @@
     debug = handle.debug;
 
     status = HYDU_String_int_to_str(size, &ssize);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     status = HYDU_String_int_to_str(id, &srank);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     status = HYDU_String_int_to_str(debug, &sdebug);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     i = 0;
     tmp[i++] = "cmd=initack\ncmd=set size=";
@@ -172,16 +156,11 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, &cmd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error while joining strings\n");
 
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
+
     HYDU_FREE(ssize);
     HYDU_FREE(srank);
     HYDU_FREE(sdebug);
@@ -193,10 +172,7 @@
 
     /* Add the process to the last PG */
     status = add_process_to_pg(run, fd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("unable to add process to pg\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to add process to pg\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -224,17 +200,12 @@
         /* We support PMI v1.0 and 1.1 */
         tmp[0] = "cmd=response_to_init pmi_version=1 pmi_subversion=1 rc=0\n";
         status = HYDU_Sock_writeline(fd, tmp[0], strlen(tmp[0]));
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "error writing PMI line\n");
     }
     else {
         /* PMI version mismatch */
-        HYDU_Error_printf
-            ("got a pmi version mismatch; pmi_version: %d; pmi_subversion: %d\n",
-             pmi_version, pmi_subversion);
-        goto fn_fail;
+        HYDU_ERR_SETANDJUMP2(status, HYD_INTERNAL_ERROR,
+                             "PMI version mismatch; %d.%d\n", pmi_version, pmi_subversion);
     }
 
   fn_exit:
@@ -256,22 +227,13 @@
     HYDU_FUNC_ENTER();
 
     status = HYDU_String_int_to_str(MAXKVSNAME, &maxkvsname);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     status = HYDU_String_int_to_str(MAXKEYLEN, &maxkeylen);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     status = HYDU_String_int_to_str(MAXVALLEN, &maxvallen);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     i = 0;
     tmp[i++] = "cmd=maxes kvsname_max=";
@@ -284,16 +246,10 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, &cmd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to join strings\n");
 
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
     HYDU_FREE(cmd);
 
     HYDU_FREE(maxkvsname);
@@ -341,17 +297,12 @@
 
     /* Find the group id corresponding to this fd */
     process = find_process(fd);
-    if (process == NULL) {      /* We didn't find the process */
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf("could not find the process structure\n");
-        goto fn_fail;
-    }
+    if (process == NULL) /* We didn't find the process */
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
+                            "unable to find process structure\n");
 
     status = HYDU_String_int_to_str(process->pg->id, &sapp_num);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     i = 0;
     tmp[i++] = "cmd=appnum appnum=";
@@ -360,16 +311,10 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, &cmd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to join strings\n");
 
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
     HYDU_FREE(cmd);
 
     HYDU_FREE(sapp_num);
@@ -394,11 +339,9 @@
 
     /* Find the group id corresponding to this fd */
     process = find_process(fd);
-    if (process == NULL) {      /* We didn't find the process */
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf("could not find the process structure for fd %d\n", fd);
-        goto fn_fail;
-    }
+    if (process == NULL) /* We didn't find the process */
+        HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                             "unable to find process structure for fd %d\n", fd);
 
     i = 0;
     tmp[i++] = "cmd=my_kvsname kvsname=";
@@ -407,16 +350,10 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, &cmd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to join strings\n");
 
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
     HYDU_FREE(cmd);
 
   fn_exit:
@@ -438,11 +375,9 @@
 
     /* Find the group id corresponding to this fd */
     process = find_process(fd);
-    if (process == NULL) {      /* We didn't find the process */
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf("could not find the process structure for fd %d\n", fd);
-        goto fn_fail;
-    }
+    if (process == NULL) /* We didn't find the process */
+        HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                             "unable to find process structure for fd %d\n", fd);
 
     process->pg->barrier_count++;
 
@@ -453,10 +388,7 @@
         run = process->pg->process;     /* The first process in the list */
         while (run) {
             status = HYDU_Sock_writeline(run->fd, cmd, strlen(cmd));
-            if (status != HYD_SUCCESS) {
-                HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-                goto fn_fail;
-            }
+            HYDU_ERR_POP(status, "error writing PMI line\n");
             run = run->next;
         }
 
@@ -492,19 +424,14 @@
 
     /* Find the group id corresponding to this fd */
     process = find_process(fd);
-    if (process == NULL) {      /* We didn't find the process */
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf("could not find the process structure for fd %d\n", fd);
-        goto fn_fail;
-    }
+    if (process == NULL) /* We didn't find the process */
+        HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                             "unable to find process structure for fd %d\n", fd);
 
-    if (strcmp(process->pg->kvs->kvs_name, kvsname)) {
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf
-            ("kvsname (%s) does not match this process' kvs space (%s)\n",
-             kvsname, process->pg->kvs->kvs_name);
-        goto fn_fail;
-    }
+    if (strcmp(process->pg->kvs->kvs_name, kvsname))
+        HYDU_ERR_SETANDJUMP2(status, HYD_INTERNAL_ERROR,
+                             "kvsname (%s) does not match this process' kvs space (%s)\n",
+                             kvsname, process->pg->kvs->kvs_name);
 
     HYDU_MALLOC(key_pair, HYD_PMCU_pmi_kvs_pair_t *, sizeof(HYD_PMCU_pmi_kvs_pair_t), status);
     MPIU_Snprintf(key_pair->key, MAXKEYLEN, "%s", key);
@@ -535,16 +462,10 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, &cmd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to join strings\n");
 
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
     HYDU_FREE(cmd);
     HYDU_FREE(key_pair_str);
 
@@ -575,19 +496,14 @@
 
     /* Find the group id corresponding to this fd */
     process = find_process(fd);
-    if (process == NULL) {      /* We didn't find the process */
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf("could not find the process structure for fd %d\n", fd);
-        goto fn_fail;
-    }
+    if (process == NULL) /* We didn't find the process */
+        HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                             "unable to find process structure for fd %d\n", fd);
 
-    if (strcmp(process->pg->kvs->kvs_name, kvsname)) {
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf
-            ("kvsname (%s) does not match this process' kvs space (%s)\n",
-             kvsname, process->pg->kvs->kvs_name);
-        goto fn_fail;
-    }
+    if (strcmp(process->pg->kvs->kvs_name, kvsname))
+        HYDU_ERR_SETANDJUMP2(status, HYD_INTERNAL_ERROR,
+                             "kvsname (%s) does not match this process' kvs space (%s)\n",
+                             kvsname, process->pg->kvs->kvs_name);
 
     i = 0;
     tmp[i++] = "cmd=get_result rc=";
@@ -617,16 +533,10 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, &cmd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to join strings\n");
 
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
     HYDU_FREE(cmd);
     HYDU_FREE(key_val_str);
 
@@ -648,10 +558,7 @@
 
     cmd = "cmd=finalize_ack\n";
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -671,16 +578,10 @@
     HYDU_FUNC_ENTER();
 
     status = HYD_BSCI_get_usize(&usize);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("Unable to get universe size from the bootstrap server\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to get bootstrap universe size\n");
 
     status = HYDU_String_int_to_str(usize, &usize_str);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while converting int to string\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to convert int to string\n");
 
     i = 0;
     tmp[i++] = "cmd=universe_size size=";
@@ -689,16 +590,10 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, &cmd);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to join strings\n");
 
     status = HYDU_Sock_writeline(fd, cmd, strlen(cmd));
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("sock utils returned error when writing PMI line\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "error writing PMI line\n");
     HYDU_FREE(cmd);
 
   fn_exit:
@@ -761,16 +656,10 @@
         tmp = pg->next;
 
         status = free_pmi_process_list(pg->process);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("unable to free process list\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to free process list\n");
 
         status = free_pmi_kvs_list(pg->kvs);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("unable to free kvs list\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to free kvs list\n");
 
         HYDU_FREE(pg);
         pg = tmp;

Modified: mpich2/trunk/src/pm/hydra/utils/args/args.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/args/args.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/utils/args/args.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -28,10 +28,7 @@
         tmp[j++] = NULL;
 
         status = HYDU_String_alloc_and_join(tmp, &envstr);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("String utils returned error while joining strings\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to join strings\n");
 
         client_arg[i++] = MPIU_Strdup(envstr);
         HYDU_FREE(envstr);
@@ -144,11 +141,8 @@
 
     HYDU_FUNC_ENTER();
 
-    if (chdir(dir) < 0) {
-        status = HYD_INTERNAL_ERROR;
-        HYDU_Error_printf("chdir failed\n");
-        goto fn_fail;
-    }
+    if (chdir(dir) < 0)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "chdir failed\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();

Modified: mpich2/trunk/src/pm/hydra/utils/env/env.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/env/env.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/utils/env/env.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -28,10 +28,8 @@
         HYDU_FREE(env_str);
 
         status = HYDU_Env_add_to_list(env_list, *env);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("launcher returned error adding env to list\n");
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to add env to list\n");
+
         HYDU_Env_free(env);
 
         i++;
@@ -64,8 +62,6 @@
     return tenv;
 
   fn_fail:
-    if (status != HYD_SUCCESS)
-        HYDU_Error_printf("freeing temporary env structure\n");
     if (tenv)
         HYDU_FREE(tenv);
     tenv = NULL;
@@ -84,11 +80,7 @@
     tenv = NULL;
     while (run) {
         status = HYDU_Env_add_to_list(&tenv, *run);
-        if (status != HYD_SUCCESS) {
-            HYDU_Error_printf("unable to add env to list\n");
-            tenv = NULL;
-            goto fn_fail;
-        }
+        HYDU_ERR_POP(status, "unable to add env to list\n");
         run = run->next;
     }
 
@@ -97,6 +89,7 @@
     return tenv;
 
   fn_fail:
+    tenv = NULL;
     goto fn_exit;
 }
 
@@ -185,11 +178,8 @@
     HYDU_FUNC_ENTER();
 
     tenv = HYDU_Env_dup(env);
-    if (tenv == NULL) {
-        HYDU_Error_printf("unable to dup environment\n");
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (tenv == NULL)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "unable to dup env\n");
 
     tenv->next = NULL;
 
@@ -254,10 +244,7 @@
     tmp[i++] = NULL;
 
     status = HYDU_String_alloc_and_join(tmp, env_str);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("String utils returned error while joining strings\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to join strings\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();

Modified: mpich2/trunk/src/pm/hydra/utils/launch/launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/launch/launch.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/utils/launch/launch.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -13,60 +13,35 @@
 
     HYDU_FUNC_ENTER();
 
-    if (in != NULL) {
-        if (pipe(inpipe) < 0) {
-            HYDU_Error_printf("pipe error (errno: %d)\n", errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
-        }
-    }
+    if (in && (pipe(inpipe) < 0))
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "pipe error (errno: %d)\n", errno);
 
-    if (pipe(outpipe) < 0) {
-        HYDU_Error_printf("pipe error (errno: %d)\n", errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (out && (pipe(outpipe) < 0))
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "pipe error (errno: %d)\n", errno);
 
-    if (pipe(errpipe) < 0) {
-        HYDU_Error_printf("pipe error (errno: %d)\n", errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (err && (pipe(errpipe) < 0))
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "pipe error (errno: %d)\n", errno);
 
     /* Fork off the process */
     tpid = fork();
     if (tpid == 0) {    /* Child process */
         close(outpipe[0]);
         close(1);
-        if (dup2(outpipe[1], 1) < 0) {
-            HYDU_Error_printf("dup2 error (errno: %d)\n", errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
-        }
+        if (dup2(outpipe[1], 1) < 0)
+            HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "dup2 error (errno: %d)\n", errno);
 
         close(errpipe[0]);
         close(2);
-        if (dup2(errpipe[1], 2) < 0) {
-            HYDU_Error_printf("dup2 error (errno: %d)\n", errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
-        }
+        if (dup2(errpipe[1], 2) < 0)
+            HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "dup2 error (errno: %d)\n", errno);
 
         close(inpipe[1]);
         close(0);
-        if (in != NULL) {
-            if (dup2(inpipe[0], 0) < 0) {
-                HYDU_Error_printf("dup2 error (errno: %d)\n", errno);
-                status = HYD_SOCK_ERROR;
-                goto fn_fail;
-            }
-        }
+        if (in && (dup2(inpipe[0], 0) < 0))
+            HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "dup2 error (errno: %d)\n", errno);
 
-        if (execvp(client_arg[0], client_arg) < 0) {
-            HYDU_Error_printf("execvp error\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (execvp(client_arg[0], client_arg) < 0)
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "execvp error\n");
     }
     else {      /* Parent process */
         close(outpipe[1]);

Modified: mpich2/trunk/src/pm/hydra/utils/signals/signals.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/signals/signals.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/utils/signals/signals.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -45,37 +45,22 @@
     HYDU_FUNC_ENTER();
 
     status = HYDU_Set_signal(SIGINT, handler);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("signal utils returned error when trying to set SIGINT signal\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to set SIGINT\n");
 
     status = HYDU_Set_signal(SIGQUIT, handler);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("signal utils returned error when trying to set SIGQUIT signal\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to set SIGQUIT\n");
 
     status = HYDU_Set_signal(SIGTERM, handler);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("signal utils returned error when trying to set SIGTERM signal\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to set SIGTERM\n");
 
 #if defined SIGSTOP
     status = HYDU_Set_signal(SIGSTOP, handler);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("signal utils returned error when trying to set SIGSTOP signal\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to set SIGSTOP\n");
 #endif /* SIGSTOP */
 
 #if defined SIGCONT
     status = HYDU_Set_signal(SIGCONT, handler);
-    if (status != HYD_SUCCESS) {
-        HYDU_Error_printf("signal utils returned error when trying to set SIGCONT signal\n");
-        goto fn_fail;
-    }
+    HYDU_ERR_POP(status, "unable to set SIGCONT\n");
 #endif /* SIGCONT */
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/utils/sock/sock.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/sock/sock.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/utils/sock/sock.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -24,26 +24,17 @@
         *port = 0;
 
         port_str = strtok(port_range, ":");
-        if (port_str == NULL) {
-            HYDU_Error_printf("error parsing port range string\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (port_str == NULL)
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "error parsing port range\n");
         low_port = atoi(port_str);
 
         port_str = strtok(NULL, ":");
-        if (port_str == NULL) {
-            HYDU_Error_printf("error parsing port range string\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (port_str == NULL)
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "error parsing port range\n");
         high_port = atoi(port_str);
 
-        if (high_port < low_port) {
-            HYDU_Error_printf("high port is smaller than low port\n");
-            status = HYD_INTERNAL_ERROR;
-            goto fn_fail;
-        }
+        if (high_port < low_port)
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "high port < low port\n");
     }
     else {
         /* If port range is NULL, if a port is already provided, we
@@ -53,17 +44,12 @@
     }
 
     *listen_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-    if (*listen_fd < 0) {
-        HYDU_Error_printf("unable to create a stream socket (errno: %d)\n", errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (*listen_fd < 0)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "cannot open socket (errno: %d)\n",
+                             errno);
 
-    if (setsockopt(*listen_fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(int)) < 0) {
-        HYDU_Error_printf("unable to set the TCP_NODELAY socket option (errno: %d)\n", errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (setsockopt(*listen_fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(int)) < 0)
+        HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "cannot set TCP_NODELAY\n");
 
     for (i = low_port; i <= high_port; i++) {
         memset((void *) &sa, 0, sizeof(sa));
@@ -76,49 +62,35 @@
          * being set is not a fatal error, so we ignore that
          * case. However, we do check for error cases, which means
          * that something bad has happened. */
-        if (setsockopt(*listen_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0) {
-            HYDU_Error_printf("unable to set socket option to SO_REUSEADDR\n");
-            goto fn_fail;
-        }
+        if (setsockopt(*listen_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0)
+            HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "cannot set SO_REUSEADDR\n");
 
         if (bind(*listen_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
             close(*listen_fd);
             /* If the address is in use, we should try the next
              * port. Otherwise, it's an error. */
-            if (errno != EADDRINUSE) {
-                status = HYD_SOCK_ERROR;
-                HYDU_Error_printf
-                    ("unable to bind listen socket %d (errno: %d)\n", *listen_fd, errno);
-                goto fn_fail;
-            }
+            if (errno != EADDRINUSE)
+                HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "bind error (errno: %d)\n", errno);
         }
         else    /* We got a port */
             break;
     }
 
     *port = i;
-    if (*port > high_port) {
-        HYDU_Error_printf("unable to find an appropriate port to bind to\n");
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (*port > high_port)
+        HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "no port to bind\n");
 
-    if (listen(*listen_fd, -1) < 0) {
-        HYDU_Error_printf("listen error on fd %d (errno: %d)\n", *listen_fd, errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (listen(*listen_fd, -1) < 0)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "listen error (errno: %d)\n", errno);
 
     /* We asked for any port, so we need to find out which port we
      * actually got. */
     if (*port == 0) {
         socklen_t sinlen = sizeof(sa);
 
-        if (getsockname(*listen_fd, (struct sockaddr *) &sa, &sinlen) < 0) {
-            HYDU_Error_printf("getsockname error (errno: %d)\n", errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
-        }
+        if (getsockname(*listen_fd, (struct sockaddr *) &sa, &sinlen) < 0)
+            HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "getsockname error (errno: %d)\n",
+                                 errno);
         *port = ntohs(sa.sin_port);
     }
 
@@ -145,20 +117,16 @@
 
     /* Get the remote host's IP address */
     ht = gethostbyname(host);
-    if (ht == NULL) {
-        HYDU_Error_printf("unable to get host address: %s (errno: %d)\n", host, errno);
-        status = HYD_INVALID_PARAM;
-        goto fn_fail;
-    }
+    if (ht == NULL)
+        HYDU_ERR_SETANDJUMP1(status, HYD_INVALID_PARAM,
+                             "unable to get host address (errno: %d)\n", errno);
     memcpy(&sa.sin_addr, ht->h_addr_list[0], ht->h_length);
 
     /* Create a socket and set the required options */
     *fd = socket(AF_INET, SOCK_STREAM, 0);
-    if (*fd < 0) {
-        HYDU_Error_printf("unable to create a stream socket (errno: %d)\n", errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (*fd < 0)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "cannot open socket (errno: %d)\n",
+                             errno);
 
     /* Not being able to connect is not an error in all cases. So we
      * return an error, but only print a warning message. The upper
@@ -185,11 +153,8 @@
     HYDU_FUNC_ENTER();
 
     *fd = accept(listen_fd, 0, 0);
-    if (*fd < 0) {
-        HYDU_Error_printf("accept error on socket %d (errno: %d)\n", listen_fd, errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (*fd < 0)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "accept error (errno: %d)\n", errno);
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -221,10 +186,7 @@
         else if (n < 0) {
             if (errno == EINTR)
                 continue;
-
-            HYDU_Error_printf("error reading from socket %d (errno: %d)\n", fd, errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
+            HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "read error (errno: %d)\n", errno);
         }
 
         *linelen += n;
@@ -266,11 +228,8 @@
         *count = read(fd, buf, maxlen);
     } while (*count < 0 && errno == EINTR);
 
-    if (*count < 0) {
-        HYDU_Error_printf("error reading from socket %d (errno: %d)\n", fd, errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (*count < 0)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "read errno (errno: %d)\n", errno);
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -288,21 +247,15 @@
 
     HYDU_FUNC_ENTER();
 
-    if (buf[maxsize - 1] != '\n') {
-        HYDU_Error_printf("write line does not end in newline\n");
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (buf[maxsize - 1] != '\n')
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "line does not end in newline\n");
 
     do {
         n = write(fd, buf, maxsize);
     } while (n < 0 && errno == EINTR);
 
-    if (n < maxsize) {
-        HYDU_Error_printf("error writing to socket %d (errno: %d)\n", fd, errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (n < maxsize)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "write error (errno: %d)\n", errno);
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -324,11 +277,8 @@
         n = write(fd, buf, maxsize);
     } while (n < 0 && errno == EINTR);
 
-    if (n < maxsize) {
-        HYDU_Error_printf("error writing to socket %d (errno: %d)\n", fd, errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
-    }
+    if (n < maxsize)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "write error (errno: %d)\n", errno);
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -347,16 +297,10 @@
     HYDU_FUNC_ENTER();
 
     flags = fcntl(fd, F_GETFL, 0);
-    if (flags < 0) {
-        status = HYD_SOCK_ERROR;
-        HYDU_Error_printf("unable to do fcntl on fd %d\n", fd);
-        goto fn_fail;
-    }
-    if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0) {
-        status = HYD_SOCK_ERROR;
-        HYDU_Error_printf("unable to do fcntl on fd %d\n", fd);
-        goto fn_fail;
-    }
+    if (flags < 0)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "fcntl failed on %d\n", fd);
+    if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0)
+        HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "fcntl failed on %d\n", fd);
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -396,17 +340,13 @@
 
     *closed = 0;
 
-    if (events & HYD_STDIN) {
-        HYDU_Error_printf("stdout handler got an stdin event: %d\n", events);
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (events & HYD_STDIN)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "stdout handler got stdin event\n");
 
     count = read(fd, buf, HYD_TMPBUF_SIZE);
     if (count < 0) {
-        HYDU_Error_printf("socket read error on fd: %d (errno: %d)\n", fd, errno);
-        status = HYD_SOCK_ERROR;
-        goto fn_fail;
+        HYDU_ERR_SETANDJUMP2(status, HYD_SOCK_ERROR, "read error on %d (errno: %d)\n",
+                             fd, errno);
     }
     else if (count == 0) {
         /* The connection has closed */
@@ -417,11 +357,9 @@
     written = 0;
     while (written != count) {
         ret = write(stdout_fd, buf + written, count - written);
-        if (ret < 0 && errno != EAGAIN) {
-            HYDU_Error_printf("socket write error on fd: %d (errno: %d)\n", stdout_fd, errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
-        }
+        if (ret < 0 && errno != EAGAIN)
+            HYDU_ERR_SETANDJUMP2(status, HYD_SOCK_ERROR, "write errnor on %d (errno: %d)\n",
+                                 stdout_fd, errno);
         if (ret > 0)
             written += ret;
     }
@@ -445,22 +383,16 @@
 
     *closed = 0;
 
-    if (events & HYD_STDOUT) {
-        HYDU_Error_printf("stdin handler got an stdout event\n");
-        status = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (events & HYD_STDOUT)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "stdin handler got stdout event\n");
 
     while (1) {
         /* If we already have buffered data, send it out */
         if (*buf_count) {
             count = write(fd, buf + *buf_offset, *buf_count);
-            if (count < 0) {
-                /* We can't get an EAGAIN as we just got out of poll */
-                HYDU_Error_printf("socket write error on fd: %d (errno: %d)\n", fd, errno);
-                status = HYD_SOCK_ERROR;
-                goto fn_fail;
-            }
+            if (count < 0)
+                HYDU_ERR_SETANDJUMP2(status, HYD_SOCK_ERROR,
+                                     "write error on %d (errno: %d)\n", fd, errno)
             *buf_offset += count;
             *buf_count -= count;
             break;
@@ -475,9 +407,8 @@
                 break;
             }
 
-            HYDU_Error_printf("socket read error on fd: %d (errno: %d)\n", 0, errno);
-            status = HYD_SOCK_ERROR;
-            goto fn_fail;
+            HYDU_ERR_SETANDJUMP1(status, HYD_SOCK_ERROR, "read error on 0 (errno: %d)\n",
+                                 errno);
         }
         else if (count == 0) {
             /* The connection has closed */

Modified: mpich2/trunk/src/pm/hydra/utils/string/string.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/string/string.c	2009-03-16 05:31:53 UTC (rev 4086)
+++ mpich2/trunk/src/pm/hydra/utils/string/string.c	2009-03-16 15:02:00 UTC (rev 4087)
@@ -41,10 +41,8 @@
 
     HYDU_FUNC_ENTER();
 
-    if (str == NULL) {
-        str = HYD_INTERNAL_ERROR;
-        goto fn_fail;
-    }
+    if (str == NULL)
+        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, NULL);
 
     *str1 = MPIU_Strdup(str);
     for (i = 0; (*str1)[i] && ((*str1)[i] != '='); i++);
@@ -85,11 +83,8 @@
     }
 
     *str = (char *) MPIU_Malloc(len + 1);
-    if (*str == NULL) {
-        HYDU_Error_printf("failed trying to allocate %d bytes\n", len + 1);
-        status = HYD_NO_MEM;
-        goto fn_fail;
-    }
+    if (*str == NULL)
+        HYDU_ERR_SETANDJUMP1(status, HYD_NO_MEM, "unable to allocate %d bytes\n", len + 1);
 
     MPIU_Snprintf(*str, len + 1, "%d", x);
 



More information about the mpich2-commits mailing list