mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-17 06:29:01 -04:00
Make the socketengines always clear the slots on DelFd, even if the underlying queue call fails
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5437 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
5b3a9f2af8
commit
457e12e541
@ -90,14 +90,16 @@ bool EPollEngine::DelFd(EventHandler* eh)
|
||||
eh->Readable() ? ev.events = EPOLLIN : ev.events = EPOLLOUT;
|
||||
ev.data.fd = fd;
|
||||
int i = epoll_ctl(EngineHandle, EPOLL_CTL_DEL, fd, &ev);
|
||||
|
||||
CurrentSetSize--;
|
||||
ref[fd] = NULL;
|
||||
|
||||
if (i < 0)
|
||||
{
|
||||
ServerInstance->Log(DEBUG,"epoll: List deletion failure: %s",strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
CurrentSetSize--;
|
||||
ref[fd] = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -70,6 +70,7 @@ bool KQueueEngine::AddFd(EventHandler* eh)
|
||||
struct kevent ke;
|
||||
ServerInstance->Log(DEBUG,"kqueue: Add socket to events, kq=%d socket=%d",EngineHandle,fd);
|
||||
EV_SET(&ke, fd, eh->Readable() ? EVFILT_READ : EVFILT_WRITE, EV_ADD, 0, 0, NULL);
|
||||
|
||||
int i = kevent(EngineHandle, &ke, 1, 0, 0, NULL);
|
||||
if (i == -1)
|
||||
{
|
||||
@ -92,6 +93,10 @@ bool KQueueEngine::DelFd(EventHandler* eh)
|
||||
|
||||
struct kevent ke;
|
||||
EV_SET(&ke, fd, eh->Readable() ? EVFILT_READ : EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
|
||||
|
||||
CurrentSetSize--;
|
||||
ref[fd] = NULL;
|
||||
|
||||
int i = kevent(EngineHandle, &ke, 1, 0, 0, NULL);
|
||||
if (i == -1)
|
||||
{
|
||||
@ -99,8 +104,6 @@ bool KQueueEngine::DelFd(EventHandler* eh)
|
||||
return false;
|
||||
}
|
||||
|
||||
CurrentSetSize--;
|
||||
ref[fd] = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user