Commit 2f27bcd7 authored by Simon Giesecke's avatar Simon Giesecke

Problem: assertion failure in poll_t::poll if timer_event retired a

pollset entry

Solution: clean up retired entries before poll
parent a2af3d18
......@@ -142,6 +142,8 @@ void zmq::poll_t::loop ()
// Execute any due timers.
int timeout = (int) execute_timers ();
cleanup_retired ();
if (pollset.empty ()) {
// TODO yield? or sleep for timeout?
continue;
......@@ -174,7 +176,11 @@ void zmq::poll_t::loop ()
if (pollset[i].revents & POLLIN)
fd_table[pollset[i].fd].events->in_event ();
}
}
}
void zmq::poll_t::cleanup_retired ()
{
// Clean up the pollset and update the fd_table accordingly.
if (retired) {
pollset_t::size_type i = 0;
......@@ -188,7 +194,6 @@ void zmq::poll_t::loop ()
}
retired = false;
}
}
}
void zmq::poll_t::worker_routine (void *arg_)
......
......@@ -79,6 +79,8 @@ class poll_t : public poller_base_t
// Main event loop.
void loop ();
void cleanup_retired();
// Reference to ZMQ context.
const ctx_t &ctx;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment