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):
Steps to Reproduce:
Reproducer is attached.
1. gcc -ltalloc -ltevent tevent_loop.c
The program never gets out of tevent_loop_wait().
"We got through the loop! OK" is never printed.
The program gets through tevent_loop_wait().
"We got through the loop! OK" is printed.
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.
Pavel, can you bring this up on samba-technical and CC me, please?
I've created an upstream bug for the issue.
Created attachment 781696 [details]
Here is the patch which has been pushed upstream.
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".
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.