add: WDelayedActionSet = 1;  sigprocmask(SIG_UNBLOCK, &sigs, NULL);  errno = save_errno;
context: buryChild(int foo){    pid_t pid;    int status;        /* R.I.P. */    /* If 2 or more kids exit in a small time window, before this handler gets     * the chance to get invoked, the SIGCHLD signals will be merged and only     * one SIGCHLD signal will be sent to us. We use a while loop to get all     * exited child status because we can't count on the number of SIGCHLD     * signals to know exactly how many kids have exited. -Dan     */    while ((pid=waitpid(-1, &status, WNOHANG))>0 || (pid<0 && errno==EINTR)) {	NotifyDeadProcess(pid, WEXITSTATUS(status));	/* 	 * Make sure that the kid will be buried even if there are	 * no events in the X event queue	 */	if (!WDelayedActionSet) {	    WDelayedActionSet = 1;	    WMAddIdleHandler(delayedAction, NULL);        }    }}