Richard Braun <rbr...@sceen.net> skribis:

> Actually, it has nothing to do with Mach. What happens is that, when
> catching one of the SIGUSR signals (SIGUSR1 i guess), the process calls
> sigsuspend, waiting for the next (probably SIGUSR2). But when returning
> from the handler (in sigreturn), the sigcontext is NULL, which actually
> makes sigreturn return. This is prohibited, and catched by setting the
> stack frame to run the firewall function (which, by running the hlt
> instruction, causes the SIGILL signal). I guess we could reduce the
> case to a small test unit that calls sigsuspend in a (SA_SIGINFO)
> signal handler and see how it goes, in which case there is a bug in the
> signal handling code.

Perhaps one test would be to #undef SA_SIGINFO in libgc’s
pthread_stop_world.c, and see if the problem still occurs?

Ludo’.


Reply via email to