[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