From 20bfcb657ec9cd9190eef6f15b7bd84840d2eb6d Mon Sep 17 00:00:00 2001 From: fortrue Date: Thu, 5 Jul 2018 11:54:12 +0800 Subject: [PATCH] fix async assign client race condition, #32 #33 #35 #36 --- src/EpollMultiplexor.cpp | 6 +----- src/Handler.cpp | 3 ++- src/KqueueMultiplexor.h | 1 - 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/EpollMultiplexor.cpp b/src/EpollMultiplexor.cpp index ea34a10..8fe7ffb 100644 --- a/src/EpollMultiplexor.cpp +++ b/src/EpollMultiplexor.cpp @@ -31,12 +31,9 @@ bool EpollMultiplexor::addSocket(Socket* s, int evts) event.events |= (evts & ReadEvent) ? EPOLLIN : 0; event.events |= (evts & WriteEvent) ? EPOLLOUT : 0; event.events |= EPOLLET; - //event.events |= EPOLLONESHOT; event.data.ptr = s; + s->setEvent(evts); int ret = epoll_ctl(mFd, EPOLL_CTL_ADD, s->fd(), &event); - if (ret == 0) { - s->setEvent(evts); - } return ret == 0; } @@ -61,7 +58,6 @@ bool EpollMultiplexor::addEvent(Socket* s, int evts) } if ((s->getEvent() | evts) != s->getEvent()) { event.events |= EPOLLET; - //event.events |= EPOLLONESHOT; int ret = epoll_ctl(mFd, EPOLL_CTL_MOD, s->fd(), &event); if (ret == 0) { s->setEvent(s->getEvent() | evts); diff --git a/src/Handler.cpp b/src/Handler.cpp index 8393e80..b29bdf4 100644 --- a/src/Handler.cpp +++ b/src/Handler.cpp @@ -315,7 +315,6 @@ void Handler::addAcceptSocket(int fd, sockaddr* addr, socklen_t len) AcceptConnection* c = nullptr; try { c = AcceptConnectionAlloc::create(fd, addr, len); - logNotice("h %d accept c %s %d", id(), c->peer(), fd); } catch (ExceptionBase& e) { logWarn("h %d create connection for client %d fail %s", id(), fd, e.what()); @@ -368,6 +367,8 @@ void Handler::addAcceptSocket(int fd, sockaddr* addr, socklen_t len) logWarn("h %d destroy c %s %d with add to event loop fail:%s", id(), c->peer(), c->fd(), StrError()); AcceptConnectionAlloc::destroy(c); + } else { + logNotice("h %d accept c %s %d assign to h %d", id(), c->peer(), fd, dst->id()); } } diff --git a/src/KqueueMultiplexor.h b/src/KqueueMultiplexor.h index a9c804e..c465c6f 100644 --- a/src/KqueueMultiplexor.h +++ b/src/KqueueMultiplexor.h @@ -67,6 +67,5 @@ int KqueueMultiplexor::wait(long usec, T* handler) typedef KqueueMultiplexor Multiplexor; -#define _MULTIPLEXOR_ASYNC_ASSIGN_ #endif