IPC client exits in very specific time-frame of connection handshake.
Corosync receives SIGPIPE and dies.
Function which is responsible for SIGPIPE (sendto) is called with flag which makes SIGPIPE handled by sendto function.
Corosync doesn't receive SIGPIPE and doesn't die.
Created attachment 743139 [details]
Proposed patch - Handle SIGPIPE in req_setup_send
Description of problem:
When IPC client exits exactly when req_setup_send function calls send,
SIGPIPE is generated and corosync (because SIGPIPE is not handled)
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. Execute corosync without RR scheduling (pass -p parameter)
2. Execute many confdb IPC clients where each of them is tracking some key(s) and makes changes to that key(s) (or use https://github.com/jfriesse/csts/blob/master/apps/confdb-track-and-change.c)
3. send SIGINT to IPC clients
4. *Corosync* receives SIGPIPE and dies
$res != 0
$res == 0
Problem is NOT specific to confdb, but it's a way how to reproduce problem reliably.
Verified using sigpipe-on-confdb-exit.sh test:
FAIL on corosync-1.4.1-15.el6.x86_64 (RHEL6.4)
PASS on corosync-1.4.1-17.el6.x86_64 (RHEL6.5)
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.