[nightly] 15-Sep-2004 build of STABLE on i386-*-openbsd (manzano)

Donald Bruce Stewart dons at cse.unsw.edu.au
Thu Sep 30 02:46:51 EDT 2004


simonmar:
> On 14 September 2004 21:43, Donald Bruce Stewart wrote:
> 
> > Unexpected failures:
> ...
> >    signals002(threaded)
> 
> Don - any idea what this one is about?
> 
> Cheers,
> 	Simon

The normal signal tests run correctly. 
However, if we we compile with -threaded the signal isn't blocked:

        main = do
          blockSignals ( userDefinedSignal1 `addSignal` emptySignalSet )
          raiseSignal userDefinedSignal1

which produces:
        $ ghc -no-recomp -o signals002 signals002.hs -threaded -package unix                
        $ ./signals002
        zsh: user-defined signal 1  ./signals002

So, what I've got so far is that blockSignals isn't working in threaded mode.
Hmm. Let's try a C program:

        #include <signal.h>

        void f(void) {
                sigset_t set;
                sigemptyset(&set);
                sigaddset(&set, SIGUSR1);
                sigprocmask(SIG_BLOCK, &set, NULL);
                raise(SIGUSR1);
        }

        int main() { f(); exit(0); }

Here we go:
        $ gcc t.c
        $ ./a.out 

Good. It blocked the signal. And with -lpthread:
        $ gcc -lpthread t.c
        $ ./a.out 
        zsh: user-defined signal 1  ./a.out

Ah ha! So signals go a bit wonky when you *link in* pthreads.
But we don't get this behaviour on Linux. Hmm, and we do on FreeBSD too:

        % uname -msr
        FreeBSD 5.0-RELEASE i386

        % gcc t.c
        % ./a.out 

        % gcc -pthread t.c
        % ./a.out 
        zsh: user-defined signal 1  ./a.out

Same threads implementation. And using pthread_sigmask() instead of
sigprocmask doesn't help. On Linux pthread_sigmask blocks the signal quite fine.

So this looks like a BSD pthread issue: how do we block signals when
using pthreads on BSD (or the Mac probably)? And a bit nasty that just
linking in -lpthread breaks the code :(

More investigations...

-- Don


More information about the Cvs-ghc mailing list