From 277af83100c96ac6de137be16f970c1612b46cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Sun, 7 Jan 2018 05:54:45 +0100 Subject: [PATCH] degesch: show an error message on log write failure Running out of space and I/O errors seem like the most likely causes. --- degesch.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/degesch.c b/degesch.c index 5908cfe..1906123 100644 --- a/degesch.c +++ b/degesch.c @@ -12738,7 +12738,8 @@ on_display_full_log (int count, int key, void *user_data) } if (ctx->current_buffer->log_file) - fflush (ctx->current_buffer->log_file); + // The regular flush will log any error eventually + (void) fflush (ctx->current_buffer->log_file); set_cloexec (fileno (full_log)); launch_backlog_helper (ctx, fileno (full_log)); @@ -13631,9 +13632,23 @@ rearm_flush_timer (struct app_context *ctx) static void on_flush_timer (struct app_context *ctx) { - // TODO: maybe also garbage collect all plugins? // I guess we don't need to do anything more complicated fflush (NULL); + + // It would be a bit problematic to handle it properly, so do this at least + LIST_FOR_EACH (struct buffer, buffer, ctx->buffers) + { + if (!buffer->log_file || !ferror (buffer->log_file)) + continue; + + // Might be a transient error such as running out of disk space, + // keep notifying of the problem until it disappears + clearerr (buffer->log_file); + log_global (ctx, BUFFER_LINE_ERROR | BUFFER_LINE_SKIP_FILE, + "Log write failure detected for #s", buffer->name); + } + + // TODO: maybe also garbage collect all plugins? rearm_flush_timer (ctx); }