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 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
|
static void
|
||||||
trigger_event_constructor(orte_trigger_event_t *trig)
|
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,
|
OBJ_CLASS_INSTANCE(orte_trigger_event_t,
|
||||||
opal_object_t,
|
opal_object_t,
|
||||||
trigger_event_constructor,
|
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));
|
write(trig->channel, &data, sizeof(int));
|
||||||
|
close(trig->channel);
|
||||||
opal_progress();
|
opal_progress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -873,6 +866,7 @@ void orte_trigger_event(orte_trigger_event_t *trig)
|
|||||||
}
|
}
|
||||||
|
|
||||||
write(trig->channel, &data, sizeof(int));
|
write(trig->channel, &data, sizeof(int));
|
||||||
|
close(trig->channel);
|
||||||
opal_progress();
|
opal_progress();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -700,10 +700,6 @@ DONE:
|
|||||||
/* cleanup our data server */
|
/* cleanup our data server */
|
||||||
orte_data_server_finalize();
|
orte_data_server_finalize();
|
||||||
|
|
||||||
/* cleanup the triggers */
|
|
||||||
OBJ_DESTRUCT(&orte_exit);
|
|
||||||
OBJ_DESTRUCT(&orteds_exit);
|
|
||||||
|
|
||||||
orte_finalize();
|
orte_finalize();
|
||||||
free(orterun_basename);
|
free(orterun_basename);
|
||||||
exit(rc);
|
exit(rc);
|
||||||
@ -782,10 +778,6 @@ finish:
|
|||||||
/* cleanup our data server */
|
/* cleanup our data server */
|
||||||
orte_data_server_finalize();
|
orte_data_server_finalize();
|
||||||
|
|
||||||
/* cleanup the triggers */
|
|
||||||
OBJ_DESTRUCT(&orte_exit);
|
|
||||||
OBJ_DESTRUCT(&orteds_exit);
|
|
||||||
|
|
||||||
orte_finalize();
|
orte_finalize();
|
||||||
free(orterun_basename);
|
free(orterun_basename);
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
@ -1001,9 +993,6 @@ static void abort_exit_callback(int fd, short ign, void *arg)
|
|||||||
* during finalize
|
* during finalize
|
||||||
*/
|
*/
|
||||||
OBJ_RELEASE(jdata);
|
OBJ_RELEASE(jdata);
|
||||||
/* cleanup the triggers */
|
|
||||||
OBJ_DESTRUCT(&orte_exit);
|
|
||||||
OBJ_DESTRUCT(&orteds_exit);
|
|
||||||
|
|
||||||
orte_finalize();
|
orte_finalize();
|
||||||
free(orterun_basename);
|
free(orterun_basename);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user