With FreeBSD 8.0 it seems like you can't block pending but undelivered signals

Jeremy Allison jra at samba.org
Tue Jan 8 10:06:00 MST 2013


On Tue, Jan 08, 2013 at 08:51:10AM -0800, Richard Sharpe wrote:
> Hi folks,
> 
> I have looked more at the AIO and signal issues I am seeing with
> FreeBSD. This is FreeBSD 8.0.
> 
> After instrumenting the code in lib/tevent/tevent_signal.c, I know:
> 
> 1. Only one thread, the main thread is receiving signals.
> 
> 2. When we hit 64 siginfo_t structures in our array, we try to stop
> the delivery of further signals (signum=68, one of the RT signals
> under FreeBSD.)
> 
> 3. They keep coming, overwriting earlier ones and causing replays of
> already handled events.
> 
> I will be reading the FreeBSD source code some more today to try to
> figure out what is going on.
> 
> The work-around is to change the size of the array for siginfo_t
> structures to 128 from 64 so it is larger than the number of pending
> AIO requests (100).

Are you saying that this code:

                sigset_t set;
                sigemptyset(&set);
                sigaddset(&set, signum);
                sigprocmask(SIG_BLOCK, &set, NULL);

fails to block RT signals on FreeBSD ? That would seem
like a horrible *BSD bug (IMHO).

Jeremy.


More information about the samba-technical mailing list