Ouch - opal_progress calls event_loop with a NO_BLOCK flag. So when run without progress threads, the ORTE tools were not blocking in the event lib as they should be. Avoid calling opal_progress inside ORTE by directly using the event_loop call instead of ORTE_WAIT_FOR_COMPLETION as parts of the OMPI layer are using that macro.
Thanks to George for spotting the problem. This commit was SVN r27815.
Этот коммит содержится в:
родитель
e30d9a2bfb
Коммит
5b8de0b9f4
@ -821,7 +821,19 @@ int orte_daemon(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* loop the event lib until an exit event is detected */
|
/* loop the event lib until an exit event is detected */
|
||||||
ORTE_WAIT_FOR_COMPLETION(orte_event_base_active);
|
#if ORTE_ENABLE_PROGRESS_THREADS
|
||||||
|
while (orte_event_base_active) {
|
||||||
|
/* provide a very short quiet period so we
|
||||||
|
* don't hammer the cpu while
|
||||||
|
*/
|
||||||
|
struct timespec tp = {0, 100};
|
||||||
|
nanosleep(&tp, NULL);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
while (orte_event_base_active) {
|
||||||
|
opal_event_loop(orte_event_base, OPAL_EVLOOP_ONCE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ensure all local procs are dead */
|
/* ensure all local procs are dead */
|
||||||
orte_odls.kill_local_procs(NULL);
|
orte_odls.kill_local_procs(NULL);
|
||||||
|
@ -1020,7 +1020,19 @@ int orterun(int argc, char *argv[])
|
|||||||
rc = orte_plm.spawn(jdata);
|
rc = orte_plm.spawn(jdata);
|
||||||
|
|
||||||
/* loop the event lib until an exit event is detected */
|
/* loop the event lib until an exit event is detected */
|
||||||
ORTE_WAIT_FOR_COMPLETION(orte_event_base_active);
|
#if ORTE_ENABLE_PROGRESS_THREADS
|
||||||
|
while (orte_event_base_active) {
|
||||||
|
/* provide a very short quiet period so we
|
||||||
|
* don't hammer the cpu while
|
||||||
|
*/
|
||||||
|
struct timespec tp = {0, 100};
|
||||||
|
nanosleep(&tp, NULL);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
while (orte_event_base_active) {
|
||||||
|
opal_event_loop(orte_event_base, OPAL_EVLOOP_ONCE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ensure all local procs are dead */
|
/* ensure all local procs are dead */
|
||||||
orte_odls.kill_local_procs(NULL);
|
orte_odls.kill_local_procs(NULL);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user