diff options
| -rw-r--r-- | ext/pcntl/pcntl.c | 18 |
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(¶m, 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, ¶m); - zval_ptr_dtor(¶m); - zval_ptr_dtor(&retval); + if (Z_TYPE_P(handle) != IS_LONG) { + ZVAL_NULL(&retval); + ZVAL_LONG(¶m, 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, ¶m); + zval_ptr_dtor(¶m); + zval_ptr_dtor(&retval); + } } next = queue->next; |
