From 61e7730ee89ad86e8b56f262f9d5ae698b445a8a Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Mon, 1 Nov 2010 22:29:25 +0000 Subject: fixed bug #52784 (Race condition when handling many concurrent signals) --- ext/pcntl/php_signal.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'ext/pcntl/php_signal.c') diff --git a/ext/pcntl/php_signal.c b/ext/pcntl/php_signal.c index 6963e6ff37..d3f86d0f12 100644 --- a/ext/pcntl/php_signal.c +++ b/ext/pcntl/php_signal.c @@ -22,11 +22,15 @@ /* php_signal using sigaction is derrived from Advanced Programing * in the Unix Environment by W. Richard Stevens p 298. */ -Sigfunc *php_signal(int signo, Sigfunc *func, int restart) +Sigfunc *php_signal4(int signo, Sigfunc *func, int restart, int mask_all) { struct sigaction act,oact; act.sa_handler = func; - sigemptyset(&act.sa_mask); + if (mask_all) { + sigfillset(&act.sa_mask); + } else { + sigemptyset(&act.sa_mask); + } act.sa_flags = 0; if (signo == SIGALRM || (! restart)) { #ifdef SA_INTERRUPT @@ -43,6 +47,11 @@ Sigfunc *php_signal(int signo, Sigfunc *func, int restart) return oact.sa_handler; } +Sigfunc *php_signal(int signo, Sigfunc *func, int restart) +{ + return php_signal4(signo, func, restart, 0); +} + /* * Local variables: * tab-width: 4 -- cgit v1.2.1