From: Mathieu Desnoyers Date: Fri, 10 May 2013 11:30:18 +0000 (-0400) Subject: Fix: Use a filled signal mask to disable all signals X-Git-Tag: v0.8.0~82 X-Git-Url: https://git.lttng.org/?a=commitdiff_plain;h=6ed4b2e64c6cef5d6d1a1c1943f29dbf4edf026a;hp=6ed4b2e64c6cef5d6d1a1c1943f29dbf4edf026a;p=urcu.git Fix: Use a filled signal mask to disable all signals Changelog from David Pelton's original patch: While using lttng-ust with an application that was calling fork() with pending signals, I found that all signals were getting unmasked shortly before the underlying call to fork(). After some investigation, I found that the rcu_bp_before_fork() function was unmasking all signals. Based on the comments for this function, it should be masking all signals. Inspection of the rest of the code in urcu-bp.c revealed the same pattern in two other functions. This patch changes the code to use a filled signal mask to disable all signals. The change to rcu_bp_before_fork() addressed the problem I was seeing while using lttng-ust. The changes to the other two functions appear to fix other instances of the same problem. Updates by Mathieu Desnoyers: - Use SIG_BLOCK instead of SIG_SETMASK when setting a filled mask. This has the same behavior in this case (since we're blocking all signals), but is semantically neater: if we ever some signals from that mask, we'd like to to a union with the signal mask already blocked by the application. - Also fix incorrect signal masking in compat_arch_x86.c. Reported-by: David Pelton Signed-off-by: Mathieu Desnoyers ---