summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/pcntl/pcntl.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
index 811f7406ce..67168868b7 100644
--- a/ext/pcntl/pcntl.c
+++ b/ext/pcntl/pcntl.c
@@ -1392,14 +1392,16 @@ void pcntl_signal_dispatch()
while (queue) {
if ((handle = zend_hash_index_find(&PCNTL_G(php_signal_table), queue->signo)) != NULL) {
- ZVAL_NULL(&retval);
- ZVAL_LONG(&param, queue->signo);
-
- /* Call php signal handler - Note that we do not report errors, and we ignore the return value */
- /* FIXME: this is probably broken when multiple signals are handled in this while loop (retval) */
- call_user_function(EG(function_table), NULL, handle, &retval, 1, &param);
- zval_ptr_dtor(&param);
- zval_ptr_dtor(&retval);
+ if (Z_TYPE_P(handle) != IS_LONG) {
+ ZVAL_NULL(&retval);
+ ZVAL_LONG(&param, queue->signo);
+
+ /* Call php signal handler - Note that we do not report errors, and we ignore the return value */
+ /* FIXME: this is probably broken when multiple signals are handled in this while loop (retval) */
+ call_user_function(EG(function_table), NULL, handle, &retval, 1, &param);
+ zval_ptr_dtor(&param);
+ zval_ptr_dtor(&retval);
+ }
}
next = queue->next;