mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-10 07:56:09 +00:00
Problem: assertion failure in poll_t::poll if timer_event retired a
pollset entry Solution: clean up retired entries before poll
This commit is contained in:
parent
a2af3d18cc
commit
2f27bcd74b
@ -142,6 +142,8 @@ void zmq::poll_t::loop ()
|
|||||||
// Execute any due timers.
|
// Execute any due timers.
|
||||||
int timeout = (int) execute_timers ();
|
int timeout = (int) execute_timers ();
|
||||||
|
|
||||||
|
cleanup_retired ();
|
||||||
|
|
||||||
if (pollset.empty ()) {
|
if (pollset.empty ()) {
|
||||||
// TODO yield? or sleep for timeout?
|
// TODO yield? or sleep for timeout?
|
||||||
continue;
|
continue;
|
||||||
@ -174,7 +176,11 @@ void zmq::poll_t::loop ()
|
|||||||
if (pollset[i].revents & POLLIN)
|
if (pollset[i].revents & POLLIN)
|
||||||
fd_table[pollset[i].fd].events->in_event ();
|
fd_table[pollset[i].fd].events->in_event ();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void zmq::poll_t::cleanup_retired ()
|
||||||
|
{
|
||||||
// Clean up the pollset and update the fd_table accordingly.
|
// Clean up the pollset and update the fd_table accordingly.
|
||||||
if (retired) {
|
if (retired) {
|
||||||
pollset_t::size_type i = 0;
|
pollset_t::size_type i = 0;
|
||||||
@ -189,7 +195,6 @@ void zmq::poll_t::loop ()
|
|||||||
retired = false;
|
retired = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void zmq::poll_t::worker_routine (void *arg_)
|
void zmq::poll_t::worker_routine (void *arg_)
|
||||||
{
|
{
|
||||||
|
@ -79,6 +79,8 @@ class poll_t : public poller_base_t
|
|||||||
// Main event loop.
|
// Main event loop.
|
||||||
void loop ();
|
void loop ();
|
||||||
|
|
||||||
|
void cleanup_retired();
|
||||||
|
|
||||||
// Reference to ZMQ context.
|
// Reference to ZMQ context.
|
||||||
const ctx_t &ctx;
|
const ctx_t &ctx;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user