]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - gui.c
gui.c: Reset terminal on shutdown in external mode.
[paraslash.git] / gui.c
diff --git a/gui.c b/gui.c
index a2d4b5f6c7611914b566128f509bea80caf6fe76..e85edba929780c440aa36915347bbb7fbca74911 100644 (file)
--- 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();
 }