diff options
Diffstat (limited to 'libglusterfs/src/event-epoll.c')
| -rw-r--r-- | libglusterfs/src/event-epoll.c | 20 | 
1 files changed, 19 insertions, 1 deletions
diff --git a/libglusterfs/src/event-epoll.c b/libglusterfs/src/event-epoll.c index dfa97cad368..78eff9398a6 100644 --- a/libglusterfs/src/event-epoll.c +++ b/libglusterfs/src/event-epoll.c @@ -765,6 +765,23 @@ event_dispatch_epoll (struct event_pool *event_pool)  	return ret;  } +/** + * @param event_pool  event_pool on which fds of interest are registered for + *                     events. + * + * @return  1 if at least one epoll worker thread is spawned, 0 otherwise + * + * NB This function SHOULD be called under event_pool->mutex. + */ + +static int +event_pool_dispatched_unlocked (struct event_pool *event_pool) +{ +        return (event_pool->pollers[0] != 0); + +} + +  int  event_reconfigure_threads_epoll (struct event_pool *event_pool, int value)  { @@ -795,7 +812,8 @@ event_reconfigure_threads_epoll (struct event_pool *event_pool, int value)                   * was called before. If event_dispatch() was not called, there                   * will be no epoll 'worker' threads running yet. */ -                if (event_pool->dispatched && oldthreadcount < value) { +                if (event_pool_dispatched_unlocked(event_pool) +                    && (oldthreadcount < value)) {                          /* create more poll threads */                          for (i = oldthreadcount; i < value; i++) {                                  /* Start a thread if the index at this location  | 
