lbarnaud Mon Nov 10 05:57:18 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/pcntl pcntl.c php_signal.h /php-src/ext/pcntl/tests 002.phpt Log: MFH: Added the oldset parameter to pcntl_sigprocmask(). Already documented. http://cvs.php.net/viewvc.cgi/php-src/ext/pcntl/pcntl.c?r1=1.48.2.2.2.4.2.12&r2=1.48.2.2.2.4.2.13&diff_format=u Index: php-src/ext/pcntl/pcntl.c diff -u php-src/ext/pcntl/pcntl.c:1.48.2.2.2.4.2.12 php-src/ext/pcntl/pcntl.c:1.48.2.2.2.4.2.13 --- php-src/ext/pcntl/pcntl.c:1.48.2.2.2.4.2.12 Sun Nov 2 21:19:34 2008 +++ php-src/ext/pcntl/pcntl.c Mon Nov 10 05:57:18 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pcntl.c,v 1.48.2.2.2.4.2.12 2008/11/02 21:19:34 felipe Exp $ */ +/* $Id: pcntl.c,v 1.48.2.2.2.4.2.13 2008/11/10 05:57:18 lbarnaud Exp $ */ #define PCNTL_DEBUG 0 @@ -76,6 +76,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_pcntl_sigprocmask, 0, 0, 2) ZEND_ARG_INFO(0, how) ZEND_ARG_INFO(0, set) + ZEND_ARG_INFO(1, oldset) ZEND_END_ARG_INFO() static @@ -760,20 +761,20 @@ /* }}} */ #ifdef HAVE_SIGPROCMASK -/* {{{ proto bool pcntl_sigprocmask(int how, array set) +/* {{{ proto bool pcntl_sigprocmask(int how, array set[, array &oldset]) Examine and change blocked signals */ PHP_FUNCTION(pcntl_sigprocmask) { long how, signo; - zval *user_set, **user_signo; - sigset_t set; + zval *user_set, *user_oldset = NULL, **user_signo; + sigset_t set, oldset; HashPosition pos; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la", &how, &user_set) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la|z", &how, &user_set, &user_oldset) == FAILURE) { return; } - if (sigemptyset(&set) != 0) { + if (sigemptyset(&set) != 0 || sigemptyset(&oldset) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno)); RETURN_FALSE; } @@ -793,11 +794,26 @@ zend_hash_move_forward_ex(Z_ARRVAL_P(user_set), &pos); } - if (sigprocmask(how, &set, NULL) != 0) { + if (sigprocmask(how, &set, &oldset) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno)); RETURN_FALSE; } + if (user_oldset != NULL) { + if (Z_TYPE_P(user_oldset) != IS_ARRAY) { + zval_dtor(user_oldset); + array_init(user_oldset); + } else { + zend_hash_clean(Z_ARRVAL_P(user_oldset)); + } + for (signo = 1; signo < MAX(NSIG-1, SIGRTMAX); ++signo) { + if (sigismember(&oldset, signo) != 1) { + continue; + } + add_next_index_long(user_oldset, signo); + } + } + RETURN_TRUE; } /* }}} */ @@ -859,6 +875,8 @@ if (Z_TYPE_P(user_siginfo) != IS_ARRAY) { zval_dtor(user_siginfo); array_init(user_siginfo); + } else { + zend_hash_clean(Z_ARRVAL_P(user_siginfo)); } add_assoc_long_ex(user_siginfo, "signo", sizeof("signo"), siginfo.si_signo); add_assoc_long_ex(user_siginfo, "errno", sizeof("errno"), siginfo.si_errno); http://cvs.php.net/viewvc.cgi/php-src/ext/pcntl/php_signal.h?r1=1.9.2.1.2.1.2.1&r2=1.9.2.1.2.1.2.2&diff_format=u Index: php-src/ext/pcntl/php_signal.h diff -u php-src/ext/pcntl/php_signal.h:1.9.2.1.2.1.2.1 php-src/ext/pcntl/php_signal.h:1.9.2.1.2.1.2.2 --- php-src/ext/pcntl/php_signal.h:1.9.2.1.2.1.2.1 Mon Dec 31 07:17:11 2007 +++ php-src/ext/pcntl/php_signal.h Mon Nov 10 05:57:18 2008 @@ -16,12 +16,19 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_signal.h,v 1.9.2.1.2.1.2.1 2007/12/31 07:17:11 sebastian Exp $ */ +/* $Id: php_signal.h,v 1.9.2.1.2.1.2.2 2008/11/10 05:57:18 lbarnaud Exp $ */ #include <signal.h> #ifndef PHP_SIGNAL_H #define PHP_SIGNAL_H +#ifndef NSIG +# define NSIG 32 +#endif +#ifndef SIGRTMAX +# define SIGRTMAX 64 +#endif + typedef void Sigfunc(int); Sigfunc *php_signal(int signo, Sigfunc *func, int restart); http://cvs.php.net/viewvc.cgi/php-src/ext/pcntl/tests/002.phpt?r1=1.1.2.5&r2=1.1.2.6&diff_format=u Index: php-src/ext/pcntl/tests/002.phpt diff -u php-src/ext/pcntl/tests/002.phpt:1.1.2.5 php-src/ext/pcntl/tests/002.phpt:1.1.2.6 --- php-src/ext/pcntl/tests/002.phpt:1.1.2.5 Fri Sep 12 12:17:07 2008 +++ php-src/ext/pcntl/tests/002.phpt Mon Nov 10 05:57:18 2008 @@ -14,6 +14,11 @@ die('failed'); } else if ($pid) { pcntl_sigprocmask(SIG_BLOCK, array(SIGCHLD,(string)SIGTERM)); + $oldset = array(); + pcntl_sigprocmask(SIG_BLOCK, array(), $oldset); + var_dump(in_array(SIGCHLD, $oldset)); + var_dump(in_array(SIGTERM, $oldset)); + posix_kill(posix_getpid(), SIGTERM); $signo = pcntl_sigwaitinfo(array(SIGTERM), $siginfo); echo "signo == SIGTERM\n"; @@ -68,6 +73,8 @@ ?> --EXPECTF-- +bool(true) +bool(true) signo == SIGTERM bool(true) code === SI_USER || SI_NOINFO
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php