diff options
Diffstat (limited to 'libglusterfs/src/event-epoll.c')
| -rw-r--r-- | libglusterfs/src/event-epoll.c | 15 | 
1 files changed, 11 insertions, 4 deletions
diff --git a/libglusterfs/src/event-epoll.c b/libglusterfs/src/event-epoll.c index ed58899caa8..8ff66a8445f 100644 --- a/libglusterfs/src/event-epoll.c +++ b/libglusterfs/src/event-epoll.c @@ -212,18 +212,18 @@ event_slot_unref (struct event_pool *event_pool, struct event_slot_epoll *slot,  	int do_close = 0;          ref = GF_ATOMIC_DEC (slot->ref); +	if (ref) +		/* slot still alive */ +		goto done;  	LOCK (&slot->lock);  	{  		fd = slot->fd;  		do_close = slot->do_close; +                slot->do_close = 0;  	}  	UNLOCK (&slot->lock); -	if (ref) -		/* slot still alive */ -		goto done; -  	event_slot_dealloc (event_pool, idx);  	if (do_close) @@ -580,6 +580,8 @@ event_dispatch_epoll_handler (struct event_pool *event_pool,  pre_unlock:  	UNLOCK (&slot->lock); +        ret = 0; +          if (!handler)  		goto out; @@ -661,6 +663,11 @@ event_dispatch_epoll_worker (void *data)                          continue;  		ret = event_dispatch_epoll_handler (event_pool, &event); +                if (ret) { +                        gf_msg ("epoll", GF_LOG_ERROR, 0, +                                LG_MSG_EXITED_EPOLL_THREAD, +                                "Failed to dispatch handler"); +                }          }  out:          if (ev_data)  | 
