X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=e85edba929780c440aa36915347bbb7fbca74911;hp=a2d4b5f6c7611914b566128f509bea80caf6fe76;hb=0bc88a7bbfacdce3caa5dd26dabe046ab20b2f6d;hpb=be46d3b63c855fe63ecc6feb7c4a2d3edab92307 diff --git a/gui.c b/gui.c index a2d4b5f6..e85edba9 100644 --- a/gui.c +++ b/gui.c @@ -498,9 +498,18 @@ static __printf_2_3 void curses_log(int ll, const char *fmt,...) /** The log function of para_gui, always set to curses_log(). */ __printf_2_3 void (*para_log)(int, const char*, ...) = curses_log; +/* Call endwin() to reset the terminal into non-visual mode. */ static void shutdown_curses(void) { - def_prog_mode(); + /* + * If para_gui received a terminating signal in external mode, the + * terminal can be in an unusable state at this point because the child + * process might not have caught the signal. In this case endwin() has + * already been called and must not be called again. So we first return + * to program mode, then call endwin(). + */ + if (!curses_active()) + reset_prog_mode(); endwin(); }