diff options
-rw-r--r-- | src/shared/log.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/shared/log.c b/src/shared/log.c index 85ed6ecb67..b5b82f61c1 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -335,8 +335,25 @@ static int write_to_console( IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_OFF); IOVEC_SET_STRING(iovec[n++], "\n"); - if (writev(console_fd, iovec, n) < 0) - return -errno; + if (writev(console_fd, iovec, n) < 0) { + + if (errno == EIO && getpid() == 1) { + + /* If somebody tried to kick us from our + * console tty (via vhangup() or suchlike), + * try to reconnect */ + + log_close_console(); + log_open_console(); + + if (console_fd < 0) + return 0; + + if (writev(console_fd, iovec, n) < 0) + return -errno; + } else + return -errno; + } return 1; } |