Votre message:
> Greetings!
> 
> On 8/3/08 9:37 PM, "Arnaud LB" <[EMAIL PROTECTED]> wrote:
> > If sigaction is not available Zend Signal Handling will not be
> > enabled, so it will not be enabled on Windows (I assume sigaction is
> > not available on Windows, it is ?).
> > For pthreads and sigprocmask, tsrm_sigmask() can be improved to add
> > support for other APIs. However it seems that only pthread provides
> > that. Apache/APR relies on phtread_sigmask() when available, or
> > sigprocmask() when not.
> 
> Ahh correct. Wasn't looking at this correctly. As for non pthread
> sigprocmask sounds like we'll find out if it's problematic in any way. Good
> to know this is at least what apr is doing.
> 
> >> If in the future we have anything in the stack registering a signal 
handler
> >> via zend_signal this will be problematic because SIGG_*_CRITICAL sections
> >> will not cover the signals registered post-startup.
> > sigaction() is process-wide, so if a thread registers a signal
> > post-startup (this is already the case, zend_sigs[] are registered at
> > request-startup) the signal will be defered in all threads :)
> 
> The deferring will basically work in the new model but I'm relying on
> sigprocmask(SIG_BLOCK/SIG_SETMASK) in the SIGNAL_CRITICAL macro's to protect
> against jumps during queue maintenance and in zend_signal_handler_unblock
> when it calls zend_signal_handler_defer. If a post startup signal is
> registered, the latest version of zend_signal doesn't add the new signal
> number to the mask, it only sets sa_mask to globals_sigmask. If we add the
> registered signal to the global_sigmask before setting sa_mask here then I
> think we would be ok.

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() :) 

> 
> >> I originally did not use an array as I was hoping to dynamically allocate
> >> more queue at runtime. I hadn't fully thought it out because there are
> >> almost no calls into the code where this would be apropriate. We could 
maybe
> >> do something in zend_signal_handler_unblock but it might be too late 
there
> >> and with this it would not be possible. I don't think I have a problem 
with
> >> this though.
> >> Not that it won't happen but I can't imagine a scenario where we get
> >> hammered with more signals than we would have slots in
> >> ZEND_SIGNAL_QUEUE_SIZE and it wouldn't be safe to ignore them. At least 
with
> >> the signals we're handling out of the box. This could change when we get
> >> pcntl working with this.
> > 
> > Yes, it may be great to be able to grow the queue when necessary.
> 
> I'll make a note in the considerations section of the wiki that when we get
> zend_signal ready to hook up to pctnl we'll reconsider the static
> allocation.

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 was also thinking to implement zend_sigaction(), allowing to know the 
previously registered signal, and to set some flags when registering signal 
handlers.

> 
> -lucas
> 
> 



-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to