summaryrefslogtreecommitdiff
path: root/degesch.c
diff options
context:
space:
mode:
authorPřemysl Janouch <p.janouch@gmail.com>2018-01-07 05:54:45 +0100
committerPřemysl Janouch <p.janouch@gmail.com>2018-01-08 22:16:36 +0100
commit277af83100c96ac6de137be16f970c1612b46cff (patch)
treed6bc9dd628ef8921b1e1c59e01ec1a3096459f55 /degesch.c
parenta5a0078def40933a890b33a16def67d50264e6eb (diff)
downloadxK-277af83100c96ac6de137be16f970c1612b46cff.tar.gz
xK-277af83100c96ac6de137be16f970c1612b46cff.tar.xz
xK-277af83100c96ac6de137be16f970c1612b46cff.zip
degesch: show an error message on log write failure
Running out of space and I/O errors seem like the most likely causes.
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);
}