> Are you talking about a SIGALRM received during the execution of > do_pending_atimers, between run_timer's call to set_alarm and > do_pending_atimers's call to unblock_atimers? If so, the SIGALRM > should be held by the operating system during that period, and Emacs > won't be informed of the SIGALRM until unblock_atimers does its > thing. Sorry, I don't see how this would cause a timer to stop. I see you're right, because SIGALRM isn't specified with SIG_IGN at any point. While verifying that, I found in sys_subshell: struct save_signal saved_handlers[5]; [...] #ifdef USABLE_SIGIO saved_handlers[3].code = SIGIO; saved_handlers[4].code = 0; #else saved_handlers[3].code = 0; #endif Shouldn't the else case initialize saved_handlers[4]? On the off chance it is garbage valued coincidentally as SIGALRM, the subsequent SIG_IGN could drop a pending SIGALRM. Peter, which OS do you run? What is USABLE_SIGIO in your src/config.h?