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.
Этот коммит содержится в:
родитель
6d9f047238
Коммит
d7da6b3226
@ -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);
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user