From 38f78c72394d4907b1b90ccfab5603fd0367c1bb Mon Sep 17 00:00:00 2001 From: counterpoint Date: Wed, 19 Aug 2015 17:23:49 +0100 Subject: [PATCH] Fix possible threading problem. --- server/core/poll.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/server/core/poll.c b/server/core/poll.c index fbfbaf9ec..5989e8560 100644 --- a/server/core/poll.c +++ b/server/core/poll.c @@ -339,7 +339,7 @@ poll_add_dcb(DCB *dcb) int poll_remove_dcb(DCB *dcb) { - int rc = -1; + int dcbfd, rc = -1; struct epoll_event ev; CHK_DCB(dcb); @@ -375,8 +375,11 @@ poll_remove_dcb(DCB *dcb) * only action for them is already done - the change of state to * DCB_STATE_NOPOLLING. */ + /*< Set bit for each maxscale thread */ + bitmask_copy(&dcb->memdata.bitmask, poll_bitmask()); + dcbfd = dcb->fd; spinlock_release(&dcb->dcb_initlock); - if (dcb->fd > 0) + if (dcbfd > 0) { rc = epoll_ctl(epoll_fd, EPOLL_CTL_DEL, dcb->fd, &ev); /** @@ -386,8 +389,6 @@ poll_remove_dcb(DCB *dcb) */ if (rc) rc = poll_resolve_error(dcb, errno, false); if (rc) raise(SIGABRT); - /*< Set bit for each maxscale thread */ - bitmask_copy(&dcb->memdata.bitmask, poll_bitmask()); } return rc; }