lbarnaud Tue Jul 29 16:46:03 2008 UTC
Added files:
/php-src/ext/pcntl/tests pcntl_signal_dispatch.phpt
Modified files:
/php-src/ext/pcntl pcntl.c php_pcntl.h
Log:
Added pcntl_signal_dispatch()
[DOC] pcntl_signal_dispatch() allows to dispatch pending signals to registered
signal handler functions on-demand. This allows to use pcntl_signal() without
ticks.
http://cvs.php.net/viewvc.cgi/php-src/ext/pcntl/pcntl.c?r1=1.62&r2=1.63&diff_format=u
Index: php-src/ext/pcntl/pcntl.c
diff -u php-src/ext/pcntl/pcntl.c:1.62 php-src/ext/pcntl/pcntl.c:1.63
--- php-src/ext/pcntl/pcntl.c:1.62 Mon Jun 30 13:27:45 2008
+++ php-src/ext/pcntl/pcntl.c Tue Jul 29 16:46:03 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pcntl.c,v 1.62 2008/06/30 13:27:45 felipe Exp $ */
+/* $Id: pcntl.c,v 1.63 2008/07/29 16:46:03 lbarnaud Exp $ */
#define PCNTL_DEBUG 0
@@ -134,6 +134,7 @@
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)
@@ -173,7 +174,7 @@
#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)
{
@@ -262,7 +263,7 @@
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;
}
@@ -644,6 +645,15 @@
}
/* }}} */
+/* {{{ 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]]) U
Get the priority of any process */
@@ -747,7 +757,7 @@
PCNTL_G(tail) = psig;
}
-void pcntl_tick_handler()
+void pcntl_signal_dispatch()
{
zval *param, **handle, *retval;
struct php_pcntl_pending_signal *queue, *next;
http://cvs.php.net/viewvc.cgi/php-src/ext/pcntl/php_pcntl.h?r1=1.24&r2=1.25&diff_format=u
Index: php-src/ext/pcntl/php_pcntl.h
diff -u php-src/ext/pcntl/php_pcntl.h:1.24 php-src/ext/pcntl/php_pcntl.h:1.25
--- php-src/ext/pcntl/php_pcntl.h:1.24 Thu Jan 3 16:18:28 2008
+++ php-src/ext/pcntl/php_pcntl.h Tue Jul 29 16:46:03 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pcntl.h,v 1.24 2008/01/03 16:18:28 nlopess Exp $ */
+/* $Id: php_pcntl.h,v 1.25 2008/07/29 16:46:03 lbarnaud Exp $ */
#ifndef PHP_PCNTL_H
#define PHP_PCNTL_H
@@ -44,6 +44,7 @@
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);
http://cvs.php.net/viewvc.cgi/php-src/ext/pcntl/tests/pcntl_signal_dispatch.phpt?view=markup&rev=1.1
Index: php-src/ext/pcntl/tests/pcntl_signal_dispatch.phpt
+++ php-src/ext/pcntl/tests/pcntl_signal_dispatch.phpt
--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!