fix async assign client race condition, #32 #33 #35 #36

This commit is contained in:
fortrue 2018-07-05 11:54:12 +08:00
parent 34cc6d151e
commit 20bfcb657e
3 changed files with 3 additions and 7 deletions

View File

@ -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;
int ret = epoll_ctl(mFd, EPOLL_CTL_ADD, s->fd(), &event);
if (ret == 0) {
s->setEvent(evts);
}
int ret = epoll_ctl(mFd, EPOLL_CTL_ADD, s->fd(), &event);
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);

View File

@ -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());
}
}

View File

@ -67,6 +67,5 @@ int KqueueMultiplexor::wait(long usec, T* handler)
typedef KqueueMultiplexor Multiplexor;
#define _MULTIPLEXOR_ASYNC_ASSIGN_
#endif