aboutsummaryrefslogtreecommitdiff
path: root/degesch.c
diff options
context:
space:
mode:
Diffstat (limited to 'degesch.c')
-rw-r--r--degesch.c19
1 files 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);
}