[zeromq-dev] possible bug in CZMQ's zloop_start .... with fix

Steven Butner butner.se at gmail.com
Sun Dec 27 00:00:06 CET 2015


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




More information about the zeromq-dev mailing list