Bug 978962 - tevent_loop_wait() never finishes
Summary: tevent_loop_wait() never finishes
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: libtevent
Version: 6.4
Hardware: Unspecified
OS: Unspecified
Target Milestone: rc
: ---
Assignee: Jakub Hrozek
QA Contact: Kaushik Banerjee
Depends On:
Blocks: 994015
TreeView+ depends on / blocked
Reported: 2013-06-27 11:50 UTC by Pavel Březina
Modified: 2014-07-23 09:52 UTC (History)
3 users (show)

Fixed In Version: libtevent-0.9.18-3.el6
Doc Type: Bug Fix
Doc Text:
Clone Of:
: 994015 (view as bug list)
Last Closed: 2013-11-21 05:42:32 UTC
Target Upstream Version:

Attachments (Terms of Use)
reproducer (1.10 KB, text/plain)
2013-06-27 11:50 UTC, Pavel Březina
no flags Details
patch (1.47 KB, patch)
2013-08-01 18:16 UTC, Andreas Schneider
no flags Details | Diff

System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2013:1552 0 normal SHIPPED_LIVE libtevent bug fix and enhancement update 2013-11-20 21:40:31 UTC
Samba Project 10012 0 None None None 2019-02-19 12:30:35 UTC

Description Pavel Březina 2013-06-27 11:50:19 UTC
Created attachment 766074 [details]

Description of problem:
If a signal handler is registered and unregistered later, tevent_loop_wait() never finishes.

Version-Release number of selected component (if applicable):

How reproducible:

Steps to Reproduce:
Reproducer is attached.
1. gcc -ltalloc -ltevent tevent_loop.c
2. ./a.out

Actual results:
The program never gets out of tevent_loop_wait().
"We got through the loop! OK" is never printed.

Expected results:
The program gets through tevent_loop_wait().
"We got through the loop! OK" is printed.

Additional info:
This is because tevent internally registers its own signal handler "sig_pipe_handler". This handler is never removed, which causes program to stuck in tevent_loop_wait() even if there are no custom handlers registered.

Comment 2 Jakub Hrozek 2013-06-27 14:41:28 UTC
Pavel, can you bring this up on samba-technical and CC me, please?

Comment 4 Andreas Schneider 2013-07-11 13:02:11 UTC
I've created an upstream bug for the issue.

Comment 5 Andreas Schneider 2013-08-01 18:16:18 UTC
Created attachment 781696 [details]

Here is the patch which has been pushed upstream.

Comment 7 Amith 2013-10-16 08:32:43 UTC
Verified the bug on libtevent Version: libtevent-0.9.18-3.el6.x86_64

Steps followed during verification:

1. Copied the reproducer "tevent_loop.c" onto the client system.
2. # gcc -ltalloc -ltevent tevent_loop.c

3. Execute the reproducer program:
[root@rhel-65 bkup]# ./a.out 
Registering signal handler...
Unregistering signal handler...
Entering tevent loop...
We got through the loop! OK

As expected, the program gets through tevent_loop_wait(), and prints "We got through the loop! OK".

Comment 9 errata-xmlrpc 2013-11-21 05:42:32 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.


Note You need to log in before you can comment on or make changes to this bug.