PHP_FE(pcntl_waitpid, arginfo_pcntl_waitpid)
PHP_FE(pcntl_wait, arginfo_pcntl_wait)
PHP_FE(pcntl_signal, arginfo_pcntl_signal)
+ PHP_FE(pcntl_signal_dispatch, arginfo_pcntl_void)
PHP_FE(pcntl_wifexited, arginfo_pcntl_wifexited)
PHP_FE(pcntl_wifstopped, arginfo_pcntl_wifstopped)
PHP_FE(pcntl_wifsignaled, arginfo_pcntl_wifsignaled)
#endif
static void pcntl_signal_handler(int);
-static void pcntl_tick_handler();
+static void pcntl_signal_dispatch();
void php_register_signal_constants(INIT_FUNC_ARGS)
{
PHP_MINIT_FUNCTION(pcntl)
{
php_register_signal_constants(INIT_FUNC_ARGS_PASSTHRU);
- php_add_tick_function(pcntl_tick_handler);
+ php_add_tick_function(pcntl_signal_dispatch);
return SUCCESS;
}
}
/* }}} */
+/* {{{ proto bool pcntl_signal_dispatch()
+ Dispatch signals to signal handlers */
+PHP_FUNCTION(pcntl_signal_dispatch)
+{
+ pcntl_signal_dispatch();
+ RETURN_TRUE;
+}
+/* }}} */
+
#ifdef HAVE_GETPRIORITY
/* {{{ proto int pcntl_getpriority([int pid [, int process_identifier]])
Get the priority of any process */
PCNTL_G(tail) = psig;
}
-void pcntl_tick_handler()
+void pcntl_signal_dispatch()
{
zval *param, **handle, *retval;
struct php_pcntl_pending_signal *queue, *next;
PHP_FUNCTION(pcntl_wtermsig);
PHP_FUNCTION(pcntl_wstopsig);
PHP_FUNCTION(pcntl_signal);
+PHP_FUNCTION(pcntl_signal_dispatch);
PHP_FUNCTION(pcntl_exec);
#ifdef HAVE_GETPRIORITY
PHP_FUNCTION(pcntl_getpriority);
--- /dev/null
+--TEST--
+pcnt_signal_dispatch()
+--SKIPIF--
+<?php
+ if (!extension_loaded("pcntl")) print "skip";
+ if (!function_exists("pcntl_signal")) print "skip pcntl_signal() not available";
+ if (!function_exists("pcntl_signal_dispatch")) print "skip pcntl_signal_dispatch() not available";
+ if (!function_exists("posix_kill")) print "skip posix_kill() not available";
+ if (!function_exists("posix_getpid")) print "skip posix_getpid() not available";
+?>
+--FILE--
+<?php
+
+pcntl_signal(SIGTERM, function ($signo) { echo "Signal handler called!\n"; });
+
+echo "Start!\n";
+posix_kill(posix_getpid(), SIGTERM);
+$i = 0; // dummy
+pcntl_signal_dispatch();
+echo "Done!\n";
+
+?>
+--EXPECTF--
+Start!
+Signal handler called!
+Done!