I'm running CZMQ version 3.0.1 (though seemingly-identical code appears
to be present in the newer version also) on an Ubuntu-14.04 LTS system
running on x64 hardware. The zloop_start() routine does not terminate
when a ticket timer handler returns -1, yet the API description for CZMQ
3.0.1 says that the zloop_start routine "returns 0 if interrupted, -1 if
canceled by a handler".
Inspection of the source at zloop.c, line 780 shows that a return of -1
from a ticket handler does indeed break out from the ticket-handling
while loop but because the return code (-1, in this case) is not stored
in "rc", the zloop_start() routine does not actually return. Instead,
on my system, it keeps polling.
If I change the code at line 781 to be as below, then zloop_start()
returns when a ticket timer handler returns -1 and the behavior seems to
be as advertised in the API documentation.
775 // Handle any tickets that have now expired
776 s_ticket_t *ticket = (s_ticket_t *) zlistx_first (self->tickets);
777 while (ticket && time_now >= ticket->when) {
778 if (self->verbose)
779 zsys_debug ("zloop: call ticket handler");
780 if (ticket->handler (self, 0, ticket->arg) == -1)
781 { rc = -1; break; } // Timer handler signaled break
782 zlistx_delete (self->tickets, ticket->list_handle);
783 ticket = (s_ticket_t *) zlistx_next (self->tickets);
784 }
Am I mis-understanding the intended behavior of zloop_start() in this
case or is this, in fact, a bug?
Thanks ....
Steve Butner
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev