X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;fp=gui.c;h=83337f86a9dc8b814d77afca9db63bc40da49897;hp=e85edba929780c440aa36915347bbb7fbca74911;hb=2a4d61a8966e984eb9bea74a6c7a4a7cfd999e70;hpb=0bc88a7bbfacdce3caa5dd26dabe046ab20b2f6d diff --git a/gui.c b/gui.c index e85edba9..83337f86 100644 --- a/gui.c +++ b/gui.c @@ -518,6 +518,14 @@ __noreturn __printf_2_3 static void die(int exit_code, const char* fmt, ...) { va_list argp; + /* Kill every process in our process group. */ + para_sigaction(SIGTERM, SIG_IGN); + kill(0, SIGTERM); + /* Wait up to two seconds for child processes to die. */ + alarm(2); + while (waitpid(0, NULL, 0) >= 0) + ; /* nothing */ + alarm(0); /* mousemask() exists only in ncurses */ #ifdef NCURSES_MOUSE_VERSION mousemask(~(mmask_t)0, NULL); /* Avoid bad terminal state with xterm. */ @@ -526,9 +534,6 @@ __noreturn __printf_2_3 static void die(int exit_code, const char* fmt, ...) va_start(argp, fmt); vfprintf(stderr, fmt, argp); va_end(argp); - /* kill every process in the process group and exit */ - para_sigaction(SIGTERM, SIG_IGN); - kill(0, SIGTERM); exit(exit_code); }