On Tuesday 05 August 2008 12:28:19 Lucas Nealan wrote: > On 8/4/08 11:51 PM, "Arnaud Le Blanc" <[EMAIL PROTECTED]> wrote: > > global_sigmask is initialized using sigfillset(), so it contains _all_ > > signals (except SIGSEGV, etc because non-blockable or not safe to block) > > and there is no need to add signals to global_sigmask it in zend_signal() > > / > > zend_signal_register() :) > > Right you are. Apparently I saw it was doing that but it didn't really > register. > > > For extensions IMO we should just let them use zend_signal() as it > > currently is. Using pcntl_signal() will override handlers previously set > > by zend_signal() but the signal will remain deferred. > > I don't see how it would continue to be deferred.
Any signal handler registered using zend_signal()/zend_sigaction() is deferred as these functions actually register zend_signal_handler_differ(), which calls the actual handler depending if critical section or not ;) In the case of pcntl_signal(), if it registers a handler for a signal, the signal will be delivered to zend_signal_handler_defer(), which will call zend_signal_handler() if not in critical section, which will call the actual handler registered by pcntl_signal(), pcntl_signal_handler(). Then the user signal handler will be called at the next tick or the next time zend_signal_dispatch() is called. > We'd be relying on the > fact that pcntl depends on a tick or call to the dispatch function to > actually invoke any userspace code. Once registering a signal via pcntl I'm > able to jump out of a critical section into pctl_signal_handler when a > signal is received. This code might be safe since it doesn't do very much > but I don't get real protection. > > > I updated the patches on the wiki: > > - Added zend_sigaction() > > - Ported PCNTL to use zend_sigaction() > > - Fixed handling of SIG_IGN > > Great. I'll pull these down. > > -lucas -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php