Hi Toralf, > pgm_sender_t::unplug() cancels timers only if the corresponding > has_rx_timer or has_tx_timer flags have been set. So what may happen > is that even after unplug() there may still be timers registered at > poller_base_t. And since pgm_sender_t::terminate() calls "delete > this" after unplug(), behaviour is undefined if > pgm_sender_t::timer_event(int token) is invoked again. (Here it seems > that the pure virtual base class methods are invoked instead. Could as > well be a segmentation fault I guess.). Yes. That's the case. > Likely this happens because in > void zmq::pgm_sender_t::out_event() rx_timer_id is reset. I think it > should be tx_timer_id instead, or? > Good spot! Can you please sign off the patch so that I can apply it?
http://www.zeromq.org/docs:contributing#toc6 However, while the above is definitely a bug, I don't think it can actually cause the pure virtual method to be called. Or am I missing something. I would rather say the problem is caused by deleting the pgm_sender_t object without calling unplug beforehand. Martin _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
