From bd94d1f0478d293379d97cf769af566777837a51 Mon Sep 17 00:00:00 2001 From: Pavel Orekhov Date: Thu, 25 Jan 2018 16:52:33 +0300 Subject: [PATCH] Segmentation at sock.close() at loop.timer #205 --- src/zmqpp/poller.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/zmqpp/poller.cpp b/src/zmqpp/poller.cpp index d94a3117..add40f12 100644 --- a/src/zmqpp/poller.cpp +++ b/src/zmqpp/poller.cpp @@ -36,9 +36,15 @@ poller::~poller() _fdindex.clear(); } +#if defined _WIN32 + static const SOCKET invalid_fd = INVALID_SOCKET; +#else + static const int invalid_fd = -1; +#endif + void poller::add(socket& socket, short const event /* = POLL_IN */) { - zmq_pollitem_t const item { socket, 0, event, 0 }; + zmq_pollitem_t const item { socket, invalid_fd, event, 0 }; add(item); } @@ -96,7 +102,7 @@ void poller::reindex(size_t const index) void poller::remove(socket_t const& socket) { - zmq_pollitem_t const item{ socket, 0, 0, 0 }; + zmq_pollitem_t const item{ socket, invalid_fd, 0, 0 }; remove(item); } @@ -104,8 +110,8 @@ void poller::remove(socket_t const& socket) void poller::remove(raw_socket_t const descriptor) { zmq_pollitem_t const item{ nullptr, descriptor, 0, 0 }; - - remove(item); + if (descriptor != invalid_fd) + remove(item); } void poller::remove(zmq_pollitem_t const& item)