1
1

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.
Этот коммит содержится в:
Ralph Castain 2013-01-14 23:06:42 +00:00
родитель e30d9a2bfb
Коммит 5b8de0b9f4
2 изменённых файлов: 26 добавлений и 2 удалений

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

@ -821,7 +821,19 @@ int orte_daemon(int argc, char *argv[])
}
/* 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 */
orte_odls.kill_local_procs(NULL);

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

@ -1020,7 +1020,19 @@ int orterun(int argc, char *argv[])
rc = orte_plm.spawn(jdata);
/* 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 */
orte_odls.kill_local_procs(NULL);