diff options
author | Adam <Adam@anope.org> | 2013-05-06 23:48:18 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2013-05-06 23:48:18 -0400 |
commit | c7f77b3b66c9e02f8c613eec2c46fea0f1860967 (patch) | |
tree | eed58c52d987800c1d8bf409089064e180c54876 /src | |
parent | 6578829fa6d278cae0307676f29ab4e76d2d2518 (diff) |
Fix a few issues with the poll socketengine
Diffstat (limited to 'src')
-rw-r--r-- | src/socketengines/socketengine_poll.cpp | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/socketengines/socketengine_poll.cpp b/src/socketengines/socketengine_poll.cpp index bc7c89f5f..31f939073 100644 --- a/src/socketengines/socketengine_poll.cpp +++ b/src/socketengines/socketengine_poll.cpp @@ -32,7 +32,6 @@ #endif static std::vector<pollfd> events; -static unsigned SocketCount; static std::map<int, unsigned> socket_positions; void SocketEngine::Init() @@ -59,17 +58,14 @@ void SocketEngine::Change(Socket *s, bool set, SocketFlag flag) if (!before_registered && now_registered) { - if (SocketCount >= events.size()) - events.resize(events.size() * 2); - - pollfd &ev = events[SocketCount]; + pollfd ev; memset(&ev, 0, sizeof(ev)); ev.fd = s->GetFD(); ev.events = (s->flags[SF_READABLE] ? POLLIN : 0) | (s->flags[SF_WRITABLE] ? POLLOUT : 0); - socket_positions[ev.fd] = SocketCount; - ++SocketCount; + socket_positions[ev.fd] = events.size(); + events.push_back(ev); } else if (before_registered && !now_registered) { @@ -77,10 +73,10 @@ void SocketEngine::Change(Socket *s, bool set, SocketFlag flag) if (pos == socket_positions.end()) throw SocketException("Unable to remove fd " + stringify(s->GetFD()) + " from poll, it does not exist?"); - if (pos->second != SocketCount - 1) + if (pos->second != events.size() - 1) { pollfd &ev = events[pos->second], - &last_ev = events[SocketCount - 1]; + &last_ev = events[events.size() - 1]; ev = last_ev; @@ -88,7 +84,7 @@ void SocketEngine::Change(Socket *s, bool set, SocketFlag flag) } socket_positions.erase(pos); - --SocketCount; + events.pop_back(); } else if (before_registered && now_registered) { @@ -103,9 +99,6 @@ void SocketEngine::Change(Socket *s, bool set, SocketFlag flag) void SocketEngine::Process() { - if (Sockets.size() > events.size()) - events.resize(events.size() * 2); - int total = poll(&events.front(), events.size(), Config->ReadTimeout * 1000); Anope::CurTime = time(NULL); @@ -117,7 +110,7 @@ void SocketEngine::Process() return; } - for (unsigned i = 0, processed = 0; i < SocketCount && processed != static_cast<unsigned>(total); ++i) + for (unsigned i = 0, processed = 0; i < events.size() && processed != static_cast<unsigned>(total); ++i) { pollfd *ev = &events[i]; |