[mpich2-commits] r7754 - in mpich2/trunk/src/pm/hydra: pm/pmiserv tools/bind tools/bind/hwloc tools/bind/plpa

balaji at mcs.anl.gov balaji at mcs.anl.gov
Wed Jan 19 08:26:59 CST 2011


Author: balaji
Date: 2011-01-19 08:26:59 -0600 (Wed, 19 Jan 2011)
New Revision: 7754

Modified:
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip.c
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c
   mpich2/trunk/src/pm/hydra/tools/bind/bind.c
   mpich2/trunk/src/pm/hydra/tools/bind/bind.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.h
   mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.c
   mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.h
Log:
Improve resource cleanup. Added finalize code for the binding
libraries to cleanup resources.

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip.c	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip.c	2011-01-19 14:26:59 UTC (rev 7754)
@@ -57,6 +57,8 @@
 
 static void cleanup_params(void)
 {
+    HYD_status status = HYD_SUCCESS;
+
     HYDU_finalize_user_global(&HYD_pmcd_pmip.user_global);
 
     /* System global */
@@ -117,7 +119,7 @@
     /* Exec list */
     HYDU_free_exec_list(HYD_pmcd_pmip.exec_list);
 
-    HYDT_bind_finalize();
+    status = HYDT_bind_finalize();
 }
 
 static void signal_cb(int sig)

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c	2011-01-19 14:26:59 UTC (rev 7754)
@@ -238,7 +238,8 @@
     status = HYDT_dmx_finalize();
     HYDU_ERR_POP(status, "error returned from demux finalize\n");
 
-    HYDT_bind_finalize();
+    status = HYDT_bind_finalize();
+    HYDU_ERR_POP(status, "error returned from binding finalize\n");
 
   fn_exit:
     HYDU_FUNC_EXIT();

Modified: mpich2/trunk/src/pm/hydra/tools/bind/bind.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/bind.c	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/tools/bind/bind.c	2011-01-19 14:26:59 UTC (rev 7754)
@@ -98,11 +98,6 @@
 
     /***************************** USER *****************************/
     if (!strncmp(binding, "user:", strlen("user:"))) {
-        /* Find the actual processing elements */
-        HYDU_MALLOC(HYDT_bind_info.bindmap, struct HYDT_bind_cpuset_t *,
-                    HYDT_bind_info.total_proc_units * sizeof(struct HYDT_bind_cpuset_t),
-                    status);
-
         /* Initialize all values to map to all CPUs */
         for (i = 0; i < HYDT_bind_info.total_proc_units; i++)
             for (j = 0; j < HYDT_bind_info.total_proc_units; j++)
@@ -124,6 +119,7 @@
             if (i >= HYDT_bind_info.total_proc_units)
                 break;
         }
+        HYDU_FREE(bindstr);
 
         goto fn_exit;
     }
@@ -169,6 +165,7 @@
                 elem = strtok(NULL, ",");
             } while (elem);
         }
+        HYDU_FREE(bindstr);
 
         for (i = HYDT_BIND_OBJ_END - 1; i > HYDT_BIND_OBJ_MACHINE; i--) {
             /* If an object has to be used, its parent object is also
@@ -233,6 +230,7 @@
                 elem = strtok(NULL, ",");
             } while (elem);
         }
+        HYDU_FREE(bindstr);
 
         topo_end = HYDT_BIND_OBJ_END;
         obj = &HYDT_bind_info.machine;
@@ -328,22 +326,13 @@
 
     level.parent = NULL;
 
-    if (level.children)
+    if (level.children) {
         for (i = 0; i < level.num_children; i++)
             cleanup_topo_level(level.children[i]);
+        HYDU_FREE(level.children);
+    }
 }
 
-void HYDT_bind_finalize(void)
-{
-    if (HYDT_bind_info.bindmap)
-        HYDU_FREE(HYDT_bind_info.bindmap);
-
-    if (HYDT_bind_info.bindlib)
-        HYDU_FREE(HYDT_bind_info.bindlib);
-
-    cleanup_topo_level(HYDT_bind_info.machine);
-}
-
 HYD_status HYDT_bind_process(struct HYDT_bind_cpuset_t cpuset)
 {
     HYD_status status = HYD_SUCCESS;
@@ -377,3 +366,40 @@
     HYDT_bind_cpuset_dup(HYDT_bind_info.bindmap[process_id % HYDT_bind_info.total_proc_units],
                          cpuset);
 }
+
+HYD_status HYDT_bind_finalize(void)
+{
+    HYD_status status = HYD_SUCCESS;
+
+    HYDU_FUNC_ENTER();
+
+    /* Finalize the binding library requested by the user */
+#if defined HAVE_PLPA
+    if (!strcmp(HYDT_bind_info.bindlib, "plpa")) {
+        status = HYDT_bind_plpa_finalize();
+        HYDU_ERR_POP(status, "unable to finalize plpa\n");
+    }
+#endif /* HAVE_PLPA */
+
+#if defined HAVE_HWLOC
+    if (!strcmp(HYDT_bind_info.bindlib, "hwloc")) {
+        status = HYDT_bind_hwloc_finalize();
+        HYDU_ERR_POP(status, "unable to finalize hwloc\n");
+    }
+#endif /* HAVE_HWLOC */
+
+    if (HYDT_bind_info.bindmap)
+        HYDU_FREE(HYDT_bind_info.bindmap);
+
+    if (HYDT_bind_info.bindlib)
+        HYDU_FREE(HYDT_bind_info.bindlib);
+
+    cleanup_topo_level(HYDT_bind_info.machine);
+
+  fn_exit:
+    HYDU_FUNC_EXIT();
+    return status;
+
+  fn_fail:
+    goto fn_exit;
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/bind.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/bind.h	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/tools/bind/bind.h	2011-01-19 14:26:59 UTC (rev 7754)
@@ -175,7 +175,7 @@
  * This function cleans up any relevant state that the binding library
  * maintained.
  */
-void HYDT_bind_finalize(void);
+HYD_status HYDT_bind_finalize(void);
 
 
 /**

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.c	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.c	2011-01-19 14:26:59 UTC (rev 7754)
@@ -294,3 +294,19 @@
   fn_fail:
     goto fn_exit;
 }
+
+HYD_status HYDT_bind_hwloc_finalize(void)
+{
+    HYD_status status = HYD_SUCCESS;
+
+    HYDU_FUNC_ENTER();
+
+    /* Nothing to finalize for now */
+
+  fn_exit:
+    HYDU_FUNC_EXIT();
+    return status;
+
+  fn_fail:
+    goto fn_exit;
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.h	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/bind_hwloc.h	2011-01-19 14:26:59 UTC (rev 7754)
@@ -12,5 +12,6 @@
 
 HYD_status HYDT_bind_hwloc_init(HYDT_bind_support_level_t * support_level);
 HYD_status HYDT_bind_hwloc_process(struct HYDT_bind_cpuset_t cpuset);
+HYD_status HYDT_bind_hwloc_finalize(void);
 
 #endif /* BIND_HWLOC_H_INCLUDED */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.c	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.c	2011-01-19 14:26:59 UTC (rev 7754)
@@ -188,3 +188,22 @@
   fn_fail:
     goto fn_exit;
 }
+
+HYD_status HYDT_bind_plpa_finalize(void)
+{
+    HYD_status status = HYD_SUCCESS;
+
+    HYDU_FUNC_ENTER();
+
+    /* FIXME: We do not check for the return value of this function,
+     * because it always seems to return an error. But not calling it
+     * is causing some resource leaks. */
+    PLPA_NAME(finalize) ();
+
+  fn_exit:
+    HYDU_FUNC_EXIT();
+    return status;
+
+  fn_fail:
+    goto fn_exit;
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.h	2011-01-19 14:26:55 UTC (rev 7753)
+++ mpich2/trunk/src/pm/hydra/tools/bind/plpa/bind_plpa.h	2011-01-19 14:26:59 UTC (rev 7754)
@@ -9,5 +9,6 @@
 
 HYD_status HYDT_bind_plpa_init(HYDT_bind_support_level_t * support_level);
 HYD_status HYDT_bind_plpa_process(struct HYDT_bind_cpuset_t cpuset);
+HYD_status HYDT_bind_plpa_finalize(void);
 
 #endif /* BIND_PLPA_H_INCLUDED */



More information about the mpich2-commits mailing list