diff options
Diffstat (limited to 'modules/socketengines')
-rw-r--r-- | modules/socketengines/m_socketengine_epoll.cpp | 20 | ||||
-rw-r--r-- | modules/socketengines/m_socketengine_select.cpp | 16 |
2 files changed, 24 insertions, 12 deletions
diff --git a/modules/socketengines/m_socketengine_epoll.cpp b/modules/socketengines/m_socketengine_epoll.cpp index 5a2561b25..5edc40502 100644 --- a/modules/socketengines/m_socketengine_epoll.cpp +++ b/modules/socketengines/m_socketengine_epoll.cpp @@ -80,8 +80,11 @@ class SocketEngineEPoll : public SocketEngineBase --SocketCount; } - void MarkWriteable(Socket *s) + void MarkWritable(Socket *s) { + if (s->HasFlag(SF_WRITABLE)) + return; + epoll_event ev; memset(&ev, 0, sizeof(ev)); @@ -91,10 +94,15 @@ class SocketEngineEPoll : public SocketEngineBase if (epoll_ctl(EngineHandle, EPOLL_CTL_MOD, ev.data.fd, &ev) == -1) Log() << "Unable to mark fd " << ev.data.fd << " as writable in socketengine epoll: " << strerror(errno); + else + s->SetFlag(SF_WRITABLE); } - void ClearWriteable(Socket *s) + void ClearWriteble(Socket *s) { + if (!s->HasFlag(SF_WRITABLE)) + return; + epoll_event ev; memset(&ev, 0, sizeof(ev)); @@ -104,6 +112,8 @@ class SocketEngineEPoll : public SocketEngineBase if (epoll_ctl(EngineHandle, EPOLL_CTL_MOD, ev.data.fd, &ev) == -1) Log() << "Unable to mark fd " << ev.data.fd << " as unwritable in socketengine epoll: " << strerror(errno); + else + s->UnsetFlag(SF_WRITABLE); } void Process() @@ -150,7 +160,7 @@ class SocketEngineEPoll : public SocketEngineBase class ModuleSocketEngineEPoll : public Module { - SocketEngineEPoll *engine; + SocketEngineEPoll engine; public: ModuleSocketEngineEPoll(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator) @@ -159,13 +169,11 @@ class ModuleSocketEngineEPoll : public Module this->SetPermanent(true); this->SetType(SOCKETENGINE); - engine = new SocketEngineEPoll(); - SocketEngine = engine; + SocketEngine = &engine; } ~ModuleSocketEngineEPoll() { - delete engine; SocketEngine = NULL; } }; diff --git a/modules/socketengines/m_socketengine_select.cpp b/modules/socketengines/m_socketengine_select.cpp index e708693d2..b966820bd 100644 --- a/modules/socketengines/m_socketengine_select.cpp +++ b/modules/socketengines/m_socketengine_select.cpp @@ -41,14 +41,20 @@ class SocketEngineSelect : public SocketEngineBase Sockets.erase(s->GetSock()); } - void MarkWriteable(Socket *s) + void MarkWritable(Socket *s) { + if (s->HasFlag(SF_WRITABLE)) + return; FD_SET(s->GetSock(), &WriteFDs); + s->SetFlag(SF_WRITABLE); } - void ClearWriteable(Socket *s) + void ClearWritable(Socket *s) { + if (!s->HasFlag(SF_WRITABLE)) + return; FD_CLR(s->GetSock(), &WriteFDs); + s->UnsetFlag(SF_WRITABLE); } void Process() @@ -101,7 +107,7 @@ class SocketEngineSelect : public SocketEngineBase class ModuleSocketEngineSelect : public Module { - SocketEngineSelect *engine; + SocketEngineSelect engine; public: ModuleSocketEngineSelect(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator) @@ -110,13 +116,11 @@ class ModuleSocketEngineSelect : public Module this->SetPermanent(true); this->SetType(SOCKETENGINE); - engine = new SocketEngineSelect(); - SocketEngine = engine; + SocketEngine = &engine; } ~ModuleSocketEngineSelect() { - delete engine; SocketEngine = NULL; } }; |