1
1

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.
Этот коммит содержится в:
Ralph Castain 2008-08-06 21:53:35 +00:00
родитель 6d9f047238
Коммит d7da6b3226
2 изменённых файлов: 4 добавлений и 21 удалений

Просмотреть файл

@ -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();
}

Просмотреть файл

@ -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);