diff options
Diffstat (limited to 'src/shared/log.c')
| -rw-r--r-- | src/shared/log.c | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/src/shared/log.c b/src/shared/log.c index 27317f7ed3..8f4995a0c8 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -115,16 +115,20 @@ void log_close_syslog(void) {  static int create_log_socket(int type) {          int fd; +        struct timeval tv; -        /* All output to the syslog/journal fds we do asynchronously, -         * and if the buffers are full we just drop the messages */ - -        fd = socket(AF_UNIX, type|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); +        fd = socket(AF_UNIX, type|SOCK_CLOEXEC, 0);          if (fd < 0)                  return -errno;          fd_inc_sndbuf(fd, SNDBUF_SIZE); +        /* We need a blocking fd here since we'd otherwise lose +        messages way too early. However, let's not hang forever in the +        unlikely case of a deadlock. */ +        timeval_store(&tv, 1*USEC_PER_MINUTE); +        setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); +          return fd;  } | 
