. Fixed bug #73727 (ZEND_MM_BITSET_LEN is "undefined symbol" in
zend_bitset.h). (Nikita)
. Fixed bug #73753 (unserialized array pointer not advancing). (David Walker)
+ . Fixed bug #73783 (SIG_IGN doesn't work when Zend Signals is enabled).
+ (David Walker)
- CLI:
. Fixed bug #72555 (CLI output(japanese) on Windows). (Anatol)
#endif
}
}
- } else if (p_sig.handler != SIG_IGN) { /* ignore SIG_IGN */
+ } else {
if (p_sig.flags & SA_SIGINFO) {
if (p_sig.flags & SA_RESETHAND) {
SIGG(handlers)[signo-1].flags = 0;
}
memset(&sa, 0, sizeof(sa));
- sa.sa_flags = SA_SIGINFO | (act->sa_flags & SA_FLAGS_MASK);
- sa.sa_sigaction = zend_signal_handler_defer;
- sa.sa_mask = global_sigmask;
+ if (SIGG(handlers)[signo-1].handler == (void *) SIG_IGN) {
+ sa.sa_sigaction = (void *) SIG_IGN;
+ } else {
+ sa.sa_flags = SA_SIGINFO | (act->sa_flags & SA_FLAGS_MASK);
+ sa.sa_sigaction = zend_signal_handler_defer;
+ sa.sa_mask = global_sigmask;
+ }
if (sigaction(signo, &sa, NULL) < 0) {
zend_error_noreturn(E_ERROR, "Error installing signal handler for %d", signo);
--- /dev/null
+--TEST--
+Bug #73783: (SIG_IGN needs to be set to prevent syscals from returning early)
+--SKIPIF--
+<?php
+ if (!extension_loaded('pcntl')) die('skip pcntl extension not available');
+ elseif (!extension_loaded('posix')) die('skip posix extension not available');
+?>
+--FILE--
+<?php
+pcntl_signal(SIGCHLD, SIG_IGN);
+
+switch(pcntl_fork()) {
+ case 0:
+ exit;
+ break;
+}
+
+$before = microtime(true);
+sleep(1);
+
+if (microtime(true) - $before >= 0.8) {
+ echo "working\n";
+} else {
+ echo "failed\n";
+}
+?>
+--EXPECTF--
+working