X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Flog.c;h=b5b82f61c18774feda281b201e4e6cef2944be7f;hp=85ed6ecb67fef53f80a307c51ff7f845fa8ebdf9;hb=0e6eaa2d98fffa86d29a9616485b7ade5c160638;hpb=99f098257f5e4135609edc3df965ebf27975df18 diff --git a/src/shared/log.c b/src/shared/log.c index 85ed6ecb6..b5b82f61c 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; }