rem: WExitASAP = 1;
add: WProgramState = WSTATE_NEED_EXIT;
context: handleSig(int sig){    static int already_crashed = 0;#ifndef NO_EMERGENCY_AUTORESTART    char *argv[2];        argv[1] = NULL;#endif        /*      * No functions that potentially do Xlib calls should be called from     * here. Xlib calls are not atomic so, so the logical integrity of     * Xlib is not guaranteed if a Xlib call is made from a signal handler.     */    if (sig == SIGHUP) {#ifdef SYS_SIGLIST_DECLARED        wwarning(_("got signal %i (%s) - restarting\n"), sig, sys_siglist[sig]);#else        wwarning(_("got signal %i - restarting\n"), sig);#endif	WRestartASAP = 1;	/* setup idle handler, so that this will be handled when	 * the select() is returned becaused of the signal, even if	 * there are no X events in the queue */	if (!WDelayedActionSet) {	    WDelayedActionSet = 1;	    WMAddIdleHandler(delayedAction, NULL);	}        return;    } else if (sig==SIGTERM) {	printf(_("%s: Received signal SIGTERM. Exiting..."), ProgName);		WExitASAP = 1;	if (!WDelayedActionSet) {	    WDelayedActionSet = 1;	    WMAddIdleHandler(delayedAction, NULL);	}	return;    }#ifdef SYS_SIGLIST_DECLARED    wfatal(_("got signal %i (%s)\n"), sig, sys_siglist[sig]);#else    wfatal(_("got signal %i\n"), sig);#endif        if (sig==SIGSEGV || sig==SIGFPE || sig==SIGBUS || sig==SIGILL) {	if (already_crashed) {	    wfatal(_("crashed while trying to do some post-crash cleanup. Aborting immediatelly."));	    abort();	}	already_crashed = 1;	#ifndef NO_EMERGENCY_AUTORESTART    	/* restart another window manager so that the X session doesn't	 * go to space */    	wwarning(_("trying to start alternative window manager..."));    	if (dpy)	    XCloseDisplay(dpy);    	dpy = NULL;        	argv[0] = FALLBACK_WINDOWMANAGER;    	execvp(FALLBACK_WINDOWMANAGER, argv);    	argv[0] = "fvwm";    	execvp("fvwm", argv);    	argv[0] = "twm";    	execvp("twm", argv);#endif /* !NO_EMERGENCY_AUTORESTART */    }        wAbort(sig==SIGSEGV);}