From d7da6b32261ce2e783b27414b5ff73cc5413cce3 Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Wed, 6 Aug 2008 21:53:35 +0000 Subject: [PATCH] Just a minor cleanup of race conditions on trigger events for exit. Close the trigger pipe upon use since it is only a one-shut anyway. This removes the need to destruct the object, leaving the lock available to protect one-time termination routines throughout the life of the program. This commit was SVN r19208. --- orte/runtime/orte_wait.c | 12 +++--------- orte/tools/orterun/orterun.c | 13 +------------ 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/orte/runtime/orte_wait.c b/orte/runtime/orte_wait.c index a8228bb31f..76416ec870 100644 --- a/orte/runtime/orte_wait.c +++ b/orte/runtime/orte_wait.c @@ -179,14 +179,6 @@ static OBJ_CLASS_INSTANCE(pending_pids_item_t, opal_list_item_t, NULL, NULL); static OBJ_CLASS_INSTANCE(registered_cb_item_t, opal_list_item_t, NULL, NULL); -static void -trigger_event_destructor(orte_trigger_event_t *trig) -{ - if (0 <= trig->channel) { - close(trig->channel); - } -} - static void trigger_event_constructor(orte_trigger_event_t *trig) { @@ -198,7 +190,7 @@ trigger_event_constructor(orte_trigger_event_t *trig) OBJ_CLASS_INSTANCE(orte_trigger_event_t, opal_object_t, trigger_event_constructor, - trigger_event_destructor); + NULL); /********************************************************************* * @@ -516,6 +508,7 @@ void orte_trigger_event(orte_trigger_event_t *trig) } write(trig->channel, &data, sizeof(int)); + close(trig->channel); opal_progress(); } @@ -873,6 +866,7 @@ void orte_trigger_event(orte_trigger_event_t *trig) } write(trig->channel, &data, sizeof(int)); + close(trig->channel); opal_progress(); } diff --git a/orte/tools/orterun/orterun.c b/orte/tools/orterun/orterun.c index 9ba42b33a8..acf91d9652 100644 --- a/orte/tools/orterun/orterun.c +++ b/orte/tools/orterun/orterun.c @@ -367,7 +367,7 @@ int orterun(int argc, char *argv[]) /* setup the exit triggers */ OBJ_CONSTRUCT(&orte_exit, orte_trigger_event_t); OBJ_CONSTRUCT(&orteds_exit, orte_trigger_event_t); - + /* flag that I am the HNP */ orte_process_info.hnp = true; @@ -700,10 +700,6 @@ DONE: /* cleanup our data server */ orte_data_server_finalize(); - /* cleanup the triggers */ - OBJ_DESTRUCT(&orte_exit); - OBJ_DESTRUCT(&orteds_exit); - orte_finalize(); free(orterun_basename); exit(rc); @@ -782,10 +778,6 @@ finish: /* cleanup our data server */ orte_data_server_finalize(); - /* cleanup the triggers */ - OBJ_DESTRUCT(&orte_exit); - OBJ_DESTRUCT(&orteds_exit); - orte_finalize(); free(orterun_basename); if (orte_debug_flag) { @@ -1001,9 +993,6 @@ static void abort_exit_callback(int fd, short ign, void *arg) * during finalize */ OBJ_RELEASE(jdata); - /* cleanup the triggers */ - OBJ_DESTRUCT(&orte_exit); - OBJ_DESTRUCT(&orteds_exit); orte_finalize(); free(orterun_basename);