summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/event-epoll.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src/event-epoll.c')
-rw-r--r--libglusterfs/src/event-epoll.c15
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)