summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-10-02 10:09:37 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-10-02 10:09:37 +0200
commit2041c9abf5fdaa9d0e632e5e6e4f3488159c9bfe (patch)
treeb713236483c009f397da8625a186f789c59322c0
parent32b87f855edafdcd5486d2b6c8b0703b343d77ed (diff)
parente98e1f92c98b7c8910c55835d8f67d0d9230cc8b (diff)
downloadphp-git-2041c9abf5fdaa9d0e632e5e6e4f3488159c9bfe.tar.gz
Merge branch 'PHP-7.4'
-rw-r--r--ext/pcntl/pcntl.c10
-rw-r--r--ext/pcntl/php_signal.c2
2 files changed, 10 insertions, 2 deletions
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
index 2ad6c3974e..254c025ef8 100644
--- a/ext/pcntl/pcntl.c
+++ b/ext/pcntl/pcntl.c
@@ -941,8 +941,9 @@ PHP_FUNCTION(pcntl_signal)
zval *handle;
zend_long signo;
zend_bool restart_syscalls = 1;
+ zend_bool restart_syscalls_is_null = 1;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "lz|b", &signo, &handle, &restart_syscalls) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "lz|b!", &signo, &handle, &restart_syscalls, &restart_syscalls_is_null) == FAILURE) {
return;
}
@@ -964,6 +965,13 @@ PHP_FUNCTION(pcntl_signal)
}
}
+ /* If restart_syscalls was not explicitly specified and the signal is SIGALRM, then default
+ * restart_syscalls to false. PHP used to enforce that restart_syscalls is false for SIGALRM,
+ * so we keep this differing default to reduce the degree of BC breakage. */
+ if (restart_syscalls_is_null && signo == SIGALRM) {
+ restart_syscalls = 0;
+ }
+
/* Special long value case for SIG_DFL and SIG_IGN */
if (Z_TYPE_P(handle) == IS_LONG) {
if (Z_LVAL_P(handle) != (zend_long) SIG_DFL && Z_LVAL_P(handle) != (zend_long) SIG_IGN) {
diff --git a/ext/pcntl/php_signal.c b/ext/pcntl/php_signal.c
index e10d380f00..ba65996c1d 100644
--- a/ext/pcntl/php_signal.c
+++ b/ext/pcntl/php_signal.c
@@ -39,7 +39,7 @@ Sigfunc *php_signal4(int signo, Sigfunc *func, int restart, int mask_all)
#ifdef HAVE_STRUCT_SIGINFO_T
act.sa_flags |= SA_SIGINFO;
#endif
- if (signo == SIGALRM || (! restart)) {
+ if (!restart) {
#ifdef SA_INTERRUPT
act.sa_flags |= SA_INTERRUPT; /* SunOS */
#endif