logger: when passing on PID info, fall back to our own if originating process is already gone
This commit is contained in:
parent
e83c7c0ba4
commit
2d011a7923
2
TODO
2
TODO
|
@ -1,3 +1,5 @@
|
||||||
|
* when launching pager, take number of columns first
|
||||||
|
|
||||||
* support remote/ssh systemctl/systemadm, and local privileged access
|
* support remote/ssh systemctl/systemadm, and local privileged access
|
||||||
|
|
||||||
* finish syslog socket stuff
|
* finish syslog socket stuff
|
||||||
|
|
22
src/logger.c
22
src/logger.c
|
@ -187,8 +187,28 @@ static int stream_log(Stream *s, char *p, usec_t ts) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
ssize_t n;
|
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;
|
return -errno;
|
||||||
|
}
|
||||||
|
|
||||||
if (!s->server->syslog_is_stream ||
|
if (!s->server->syslog_is_stream ||
|
||||||
(size_t) n >= IOVEC_TOTAL_SIZE(iovec, ELEMENTSOF(iovec)))
|
(size_t) n >= IOVEC_TOTAL_SIZE(iovec, ELEMENTSOF(iovec)))
|
||||||
|
|
Loading…
Reference in New Issue