We had long-ago added a new loop type to libevent: EVLOOP_ONELOOP.
After talking with Brian, we're pretty sure that this is only because really, really old libevent didn't allow bitwise or-ing of the other loop types, because what we really need is (EVLOOP_ONCE | EVLOOP_NONBLOCK). And that's what EVLOOP_ONELOOP did (i.e., we changed the logic of libevent's event.c to let ONELOOP do both ONCE and NONBLOCK things). In the new libevent version, we didn't implement EVLOOP_ONELOOP properly. As a result, and we got hangs in the SM BTL add_procs function. Note that the SM BTL wasn't to blame -- it was purely a side-effect of bad ONELOOP integration (i.e., if you got past the SM BTL add_procs, you may well have hung somewhere else). This commit removes all ONELOOP customizations from event.c and returns it to (almost) its original state from the libevent 2.0.7-rc distribution. Everwhere in the code base where we used ONELOOP, we now use (ONCE | NONBLOCK). This commit was SVN r23957.
Этот коммит содержится в:
@ -37,7 +37,7 @@
|
||||
/*
|
||||
* default parameters
|
||||
*/
|
||||
static int opal_progress_event_flag = OPAL_EVLOOP_ONELOOP;
|
||||
static int opal_progress_event_flag = OPAL_EVLOOP_ONCE | OPAL_EVLOOP_NONBLOCK;
|
||||
volatile int32_t opal_progress_thread_count = 0;
|
||||
int opal_progress_spin_count = 10000;
|
||||
|
||||
|
Ссылка в новой задаче
Block a user