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’.