diff --git a/src/main.c b/src/main.c index cb2964fa6d0b979cf3adf089c9903d5dae0cb015..bb4dec46e6135496cf79dd8e65bb8b6270290666 100644 --- a/src/main.c +++ b/src/main.c @@ -234,7 +234,15 @@ void feh_clean_exit(void) if(disp) XCloseDisplay(disp); - if (control_via_stdin && isatty(STDIN_FILENO)) + /* + * Only restore the old terminal settings if + * - we changed them in the first place + * - stdin still is a terminal (it might have been closed) + * - stdin still belongs to us (we might have been detached from the + * controlling terminal, in that case we probably shouldn't be messing + * around with it) + */ + if (control_via_stdin && isatty(STDIN_FILENO) && getpgrp() == (tcgetpgrp(STDIN_FILENO))) if (tcsetattr(STDIN_FILENO, TCSANOW, &old_term_settings) == -1) eprintf("tcsetattr failed");