]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/socketengines/socketengine_ports.cpp
Fix typo in kqueue
[user/henk/code/inspircd.git] / src / socketengines / socketengine_ports.cpp
index 43d9581739927e8c0525dce0ab4949150090bc74..e5523acb6152e5a6e9e1b6dd91050c05babbf6db 100644 (file)
 #include "inspircd.h"
 #include "exitcodes.h"
 #include <port.h>
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2010 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
 
 #ifndef __SOCKETENGINE_PORTS__
 #define __SOCKETENGINE_PORTS__
@@ -60,7 +48,7 @@ public:
        virtual ~PortsEngine();
        virtual bool AddFd(EventHandler* eh, int event_mask);
        void OnSetEvent(EventHandler* eh, int old_event, int new_event);
-       virtual bool DelFd(EventHandler* eh, bool force = false);
+       virtual void DelFd(EventHandler* eh);
        virtual int DispatchEvents();
        virtual std::string GetName();
        virtual void WantWrite(EventHandler* eh);
@@ -143,11 +131,11 @@ void PortsEngine::WantWrite(EventHandler* eh, int old_mask, int new_mask)
                port_associate(EngineHandle, PORT_SOURCE_FD, eh->GetFd(), mask_to_events(new_mask), eh);
 }
 
-bool PortsEngine::DelFd(EventHandler* eh, bool force)
+void PortsEngine::DelFd(EventHandler* eh)
 {
        int fd = eh->GetFd();
        if ((fd < 0) || (fd > GetMaxFds() - 1))
-               return false;
+               return;
 
        port_dissociate(EngineHandle, PORT_SOURCE_FD, fd);
 
@@ -167,6 +155,7 @@ int PortsEngine::DispatchEvents()
 
        unsigned int nget = 1; // used to denote a retrieve request.
        int i = port_getn(EngineHandle, this->events, GetMaxFds() - 1, &nget, &poll_time);
+       ServerInstance->UpdateTime();
 
        // first handle an error condition
        if (i == -1)
@@ -196,6 +185,8 @@ int PortsEngine::DispatchEvents()
                                        {
                                                ReadEvents++;
                                                eh->HandleEvent(EVENT_READ);
+                                               if (eh != ref[fd])
+                                                       continue;
                                        }
                                        if (events[i].portev_events & POLLWRNORM)
                                        {