X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flogger.c;h=482ec41244502298a1b12b877367a00b37a77ece;hp=32c57f8f82a6046d9e1bf1520d406b6b8a3fffa5;hb=2d011a7923a35d8aef49059c2e9010bf1d6a4bac;hpb=e83c7c0ba480c6d37d6d586b9337b1ad32ee52ca diff --git a/src/logger.c b/src/logger.c index 32c57f8f8..482ec4124 100644 --- a/src/logger.c +++ b/src/logger.c @@ -187,8 +187,28 @@ static int stream_log(Stream *s, char *p, usec_t ts) { for (;;) { ssize_t n; - if ((n = sendmsg(s->server->syslog_fd, &msghdr, MSG_NOSIGNAL)) < 0) + if ((n = sendmsg(s->server->syslog_fd, &msghdr, MSG_NOSIGNAL)) < 0) { + + if (errno == ESRCH) { + pid_t our_pid; + + /* Hmm, maybe the process this + * line originates from is + * dead? Then let's patch in + * our own pid and retry, + * since we have nothing + * better */ + + our_pid = getpid(); + + if (ucred->pid != our_pid) { + ucred->pid = our_pid; + continue; + } + } + return -errno; + } if (!s->server->syslog_is_stream || (size_t) n >= IOVEC_TOTAL_SIZE(iovec, ELEMENTSOF(iovec)))