From 0e6eaa2d98fffa86d29a9616485b7ade5c160638 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 18 Dec 2013 16:49:15 +0100 Subject: log: when we log to /dev/console and got disconnected (maybe due to vhangup) reconnect --- src/shared/log.c | 21 +++++++++++++++++++-- 1 file 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; } -- cgit v1.2.3-54-g00ecf