[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [Libevent-users] [2.0.19-stable] Infinite loop



Azat,

Could this patch


On 14 September 2016 at 18:48, sahil aggarwal <sahil.agg15@xxxxxxxxx> wrote:
> Azat,
>
> Yes this happens every time server close the connection. To reproduce i :
> * start my client (multiple threads but event_base being exclusive to
> 1 thread handling the events)
> * start server
> * generate some requests from client which succeed
> * stop server
> * generate some requests where now it loops forever.
>
> I can write reproducer and try it with latest libevent too. In the
> mean time i have live GDB attached, if you need any info let me know.
>
> Thanks
>
> On 14 September 2016 at 16:37, Azat Khuzhin <a3at.mail@xxxxxxxxx> wrote:
>> On Wed, Sep 14, 2016 at 04:33:41PM +0530, sahil aggarwal wrote:
>>> Hi,
>>>
>>> Getting stuck in infinite loop after retry on evhttp_connection. After
>>> attaching GDB this is what i found:
>>>
>>> ----------
>>>
>>> #0  0x00007f9a8f5efdb9 in event_queue_remove (base=base@entry=0x24bf830,
>>> ev=ev@entry=0x7f9a84006da0, queue=queue@entry=8)
>>>     at event.c:2495
>>> #1  0x00007f9a8f5f4040 in event_del_internal (ev=0x7f9a84006da0) at
>>> event.c:2234
>>> #2  timeout_process (base=0x24bf830) at event.c:2481
>>> #3  event_base_loop (base=base@entry=0x24bf830, flags=flags@entry=0) at
>>> event.c:1614
>>>
>>>
>>> ---------
>>>
>>> #0  event_active_nolock (ev=<optimized out>, res=<optimized out>,
>>> ncalls=<optimized out>) at event.c:2315
>>> #1  0x00007f9a8f5f3f76 in timeout_process (base=0x24bf830) at event.c:2485
>>> #2  event_base_loop (base=base@entry=0x24bf830, flags=flags@entry=0) at
>>> event.c:1614
>>>
>>>
>>> So the event is getting removed and queued in active queue. And event given
>>> by
>>>
>>> ev = min_heap_top(&base->timeheap)
>>>
>>> doesn't have EV_TIMEOUT flag set due which it won't remove from the
>>> min_heap and it always get the same event on the top hence the infinite
>>> loop.
>>>
>>> * event_base not being shared across multiple threads.
>>>
>>> * How 1 have event in min_heap without EV_TIMEOUT  flag set and
>>> e->ev_timeout_pos.min_heap_idx = -1  as on adding we always set the flag ?
>>
>> Hi,
>>
>> Does it triggers every time? If so can you please try libevent from
>> sources (https://github.com/libevent/libevent)? And does you program
>> single-threaded or multi?
>>
>> Also if you have a reproducer (~100 lines) it will be useful to see it.
>>
>> Thanks,
>> Azat.
>> ***********************************************************************
>> To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
>> unsubscribe libevent-users    in the body.
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.