summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-10-21 19:09:59 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-10-21 19:09:59 +0000
commit32bffd861fd1c8b723ae63f4ea66720fd47e7d0a (patch)
tree3e6417442f7adc152bec27d1a470a245bdca91c2
parent1e29b8973127201f4798f7f85bb68de35b2cc5f4 (diff)
Change how the socket engines work when you addfd on an fd that already exists.
the only SANE outcome is that youve forgotten to DelFd, so it does this for you. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8269 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/socketengine_epoll.cpp5
-rw-r--r--src/socketengine_iocp.cpp5
-rw-r--r--src/socketengine_kqueue.cpp2
-rw-r--r--src/socketengine_ports.cpp2
-rw-r--r--src/socketengine_select.cpp2
5 files changed, 5 insertions, 11 deletions
diff --git a/src/socketengine_epoll.cpp b/src/socketengine_epoll.cpp
index 55d3cb1ea..df79aa083 100644
--- a/src/socketengine_epoll.cpp
+++ b/src/socketengine_epoll.cpp
@@ -49,10 +49,7 @@ bool EPollEngine::AddFd(EventHandler* eh)
return false;
if (ref[fd])
- {
- ServerInstance->Log(DEBUG,"Ref occupied!");
- return false;
- }
+ DelFd(ref[fd]);
struct epoll_event ev;
memset(&ev,0,sizeof(struct epoll_event));
diff --git a/src/socketengine_iocp.cpp b/src/socketengine_iocp.cpp
index 155fb14f4..d780b9043 100644
--- a/src/socketengine_iocp.cpp
+++ b/src/socketengine_iocp.cpp
@@ -58,10 +58,7 @@ bool IOCPEngine::AddFd(EventHandler* eh)
/* Already an entry here */
if (ref[*fake_fd])
- {
- delete fake_fd;
- return false;
- }
+ DelFd(ref[fd]);
/* are we a listen socket? */
getsockopt(eh->GetFd(), SOL_SOCKET, SO_ACCEPTCONN, (char*)&is_accept, &opt_len);
diff --git a/src/socketengine_kqueue.cpp b/src/socketengine_kqueue.cpp
index 640172305..0f6f805ca 100644
--- a/src/socketengine_kqueue.cpp
+++ b/src/socketengine_kqueue.cpp
@@ -59,7 +59,7 @@ bool KQueueEngine::AddFd(EventHandler* eh)
return false;
if (ref[fd])
- return false;
+ DelFd(ref[fd]);
struct kevent ke;
EV_SET(&ke, fd, eh->Readable() ? EVFILT_READ : EVFILT_WRITE, EV_ADD, 0, 0, NULL);
diff --git a/src/socketengine_ports.cpp b/src/socketengine_ports.cpp
index 352b73062..7ebceacc8 100644
--- a/src/socketengine_ports.cpp
+++ b/src/socketengine_ports.cpp
@@ -46,7 +46,7 @@ bool PortsEngine::AddFd(EventHandler* eh)
return false;
if (ref[fd])
- return false;
+ DelFd(ref[fd]);
ref[fd] = eh;
port_associate(EngineHandle, PORT_SOURCE_FD, fd, eh->Readable() ? POLLRDNORM : POLLWRNORM, eh);
diff --git a/src/socketengine_select.cpp b/src/socketengine_select.cpp
index 3cebe7210..a369cc95a 100644
--- a/src/socketengine_select.cpp
+++ b/src/socketengine_select.cpp
@@ -37,7 +37,7 @@ bool SelectEngine::AddFd(EventHandler* eh)
return false;
if (ref[fd])
- return false;
+ DelFd(ref[fd]);
fds[fd] = fd;
ref[fd] = eh;