I don't believe that there is any race if you use sigsuspend and sigblock because I claim that sigsuspend is guarenteed not to return until after any signal handler returns. (Remember that unlike MLton, signal handlers are NOT in a separate thread.) ... Yes, I just checked the better documentation on Sun machines, and sigsuspend() is guarenteed to return AFTER the signal catching function returns.