[zeromq-dev] possible bug in CZMQ's zloop_start .... with fix
Pieter Hintjens
ph at imatix.com
Sun Dec 27 10:41:08 CET 2015
Looks good. Thanks for taking the time to make this patch.
-Pieter
On Sun, Dec 27, 2015 at 12:00 AM, Steven Butner <butner.se at gmail.com> wrote:
> On 12/25/2015 3:00 AM, zeromq-dev-request at lists.zeromq.org wrote:
>> Send zeromq-dev mailing list submissions to
>> zeromq-dev at lists.zeromq.org
>>
>> To subscribe or unsubscribe via the World Wide Web, visit
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>> or, via email, send a message with subject or body 'help' to
>> zeromq-dev-request at lists.zeromq.org
>>
>> You can reach the person managing the list at
>> zeromq-dev-owner at lists.zeromq.org
>>
>> When replying, please edit your Subject line so it is more specific
>> than "Re: Contents of zeromq-dev digest..."
>>
>>
>> Today's Topics:
>>
>> 1. Re: possible bug in CZMQ's zloop_start .... with fix
>> (Pieter Hintjens)
>>
>>
>> ----------------------------------------------------------------------
>>
>> Message: 1
>> Date: Thu, 24 Dec 2015 18:18:41 +0100
>> From: Pieter Hintjens <ph at imatix.com>
>> Subject: Re: [zeromq-dev] possible bug in CZMQ's zloop_start .... with
>> fix
>> To: ZeroMQ development list <zeromq-dev at lists.zeromq.org>
>> Message-ID:
>> <CADL5_sis3M=VnZY1gB=t4cWrtMQwbH=3wkFuwjHivafJ-1aNMA at mail.gmail.com>
>> Content-Type: text/plain; charset=UTF-8
>>
>> Sounds familiar; be sure to retest on CZMQ master and see it's not
>> been fixed there. If not, go ahead and send a pull request... :)
>>
>> On Wed, Dec 23, 2015 at 10:48 PM, Steven Butner <butner.se at gmail.com> wrote:
>>> 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
>>> zeromq-dev at lists.zeromq.org
>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>> ------------------------------
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>>
>> End of zeromq-dev Digest, Vol 96, Issue 23
>> ******************************************
> Pieter:
>
> I have checked the version 3.0.2 master for CZMQ and found that it has
> the same bug. Thus, per your suggestions in our previous email exchange
> I have created issue #1278 and pull request #1279.
>
> This is my first time contributing a fix for a bug. I hope I did all of
> the steps of the C4 process correctly. On my systems this change fixes
> the problem.
>
> Steve Butner
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
More information about the zeromq-dev
mailing list