log, passt: Keep printing to stderr when passt is running in foreground
There are two cases where we want to stop printing to stderr: if it's
closed, and if pasta spawned a shell (and --debug wasn't given).
But if passt is running in foreground, we currently stop to report any
message, even error messages, once we're ready, as reported by
Laurent, because we set the log_runtime flag, which we use to indicate
we're ready, regardless of whether we're running in foreground or not.
Turn that flag (back) to log_stderr, and set it only when we really
want to stop printing to stderr.
Reported-by: Laurent Vivier <lvivier@redhat.com>
Fixes: afd9cdc9bb
("log, passt: Always print to stderr before initialisation is complete")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
3a082c4ecb
commit
ee36266a55
3 changed files with 11 additions and 9 deletions
6
log.c
6
log.c
|
@ -44,7 +44,7 @@ struct timespec log_start; /* Start timestamp */
|
||||||
|
|
||||||
int log_trace; /* --trace mode enabled */
|
int log_trace; /* --trace mode enabled */
|
||||||
bool log_conf_parsed; /* Logging options already parsed */
|
bool log_conf_parsed; /* Logging options already parsed */
|
||||||
bool log_runtime; /* Daemonised, or ready in foreground */
|
bool log_stderr = true; /* Not daemonised, no shell spawned */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logtime_fmt_and_arg() - Build format and arguments to print relative log time
|
* logtime_fmt_and_arg() - Build format and arguments to print relative log time
|
||||||
|
@ -257,7 +257,7 @@ void vlogmsg(bool newline, int pri, const char *format, va_list ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug_print || !log_conf_parsed ||
|
if (debug_print || !log_conf_parsed ||
|
||||||
(!log_runtime && (log_mask & LOG_MASK(LOG_PRI(pri))))) {
|
(log_stderr && (log_mask & LOG_MASK(LOG_PRI(pri))))) {
|
||||||
(void)vfprintf(stderr, format, ap);
|
(void)vfprintf(stderr, format, ap);
|
||||||
if (newline && format[strlen(format)] != '\n')
|
if (newline && format[strlen(format)] != '\n')
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
|
@ -364,7 +364,7 @@ void passt_vsyslog(bool newline, int pri, const char *format, va_list ap)
|
||||||
if (newline && format[strlen(format)] != '\n')
|
if (newline && format[strlen(format)] != '\n')
|
||||||
n += snprintf(buf + n, BUFSIZ - n, "\n");
|
n += snprintf(buf + n, BUFSIZ - n, "\n");
|
||||||
|
|
||||||
if (log_sock >= 0 && send(log_sock, buf, n, 0) != n && !log_runtime)
|
if (log_sock >= 0 && send(log_sock, buf, n, 0) != n && log_stderr)
|
||||||
fprintf(stderr, "Failed to send %i bytes to syslog\n", n);
|
fprintf(stderr, "Failed to send %i bytes to syslog\n", n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
log.h
2
log.h
|
@ -43,7 +43,7 @@ void logmsg_perror(int pri, const char *format, ...)
|
||||||
|
|
||||||
extern int log_trace;
|
extern int log_trace;
|
||||||
extern bool log_conf_parsed;
|
extern bool log_conf_parsed;
|
||||||
extern bool log_runtime;
|
extern bool log_stderr;
|
||||||
extern struct timespec log_start;
|
extern struct timespec log_start;
|
||||||
|
|
||||||
void trace_init(int enable);
|
void trace_init(int enable);
|
||||||
|
|
12
passt.c
12
passt.c
|
@ -290,15 +290,17 @@ int main(int argc, char **argv)
|
||||||
if (isolate_prefork(&c))
|
if (isolate_prefork(&c))
|
||||||
die("Failed to sandbox process, exiting");
|
die("Failed to sandbox process, exiting");
|
||||||
|
|
||||||
if (!c.foreground)
|
if (!c.foreground) {
|
||||||
__daemon(c.pidfile_fd, devnull_fd);
|
__daemon(c.pidfile_fd, devnull_fd);
|
||||||
else
|
log_stderr = false;
|
||||||
|
} else {
|
||||||
pidfile_write(c.pidfile_fd, getpid());
|
pidfile_write(c.pidfile_fd, getpid());
|
||||||
|
}
|
||||||
|
|
||||||
log_runtime = true;
|
if (pasta_child_pid) {
|
||||||
|
|
||||||
if (pasta_child_pid)
|
|
||||||
kill(pasta_child_pid, SIGUSR1);
|
kill(pasta_child_pid, SIGUSR1);
|
||||||
|
log_stderr = false;
|
||||||
|
}
|
||||||
|
|
||||||
isolate_postfork(&c);
|
isolate_postfork(&c);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue