Is it possible to block pending queued RealTime signals (AIO originating)?

David Xu davidxu at freebsd.org
Tue Jan 8 02:46:06 UTC 2013


On 2013/01/08 09:27, Richard Sharpe wrote:
> Hi folks,
>
> I am running into a problem with AIO in Samba 3.6.x under FreeBSD 8.0
> and I want to check if the assumptions made by the original coder are
> correct.
>
> Essentially, the code queues a number of AIO requests (up to 100) and
> specifies an RT signal to be sent upon completion with siginfo_t.
>
> These are placed into an array.
>
> The code assumes that when handling one of these signals, if it has
> already received N such siginfo_t structures, it can BLOCK further
> instances of the signal while these structures are drained by the main
> code in Samba.
>
> However, my debugging suggests that if a bunch of signals have already
> been queued, you cannot block those undelivered but already queued
> signals.
>
> I am certain that they are all being delivered to the main thread and
> that they keep coming despite the code trying to stop them at 64 (they
> get all the way up to the 100 that were queued.)
>
> Can someone confirm whether I have this correct or not?
>

I am curious that how the code BLOCKs the signal in its signal handler ?
AFAIK, after signal handler returned, original signal mask is restored,
and re-enables the signal delivering, unless you change it in
ucontext.uc_sigmask.

Regards,
David Xu



More information about the freebsd-hackers mailing list