diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2018-01-07 05:54:45 +0100 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2018-01-08 22:16:36 +0100 |
commit | 277af83100c96ac6de137be16f970c1612b46cff (patch) | |
tree | d6bc9dd628ef8921b1e1c59e01ec1a3096459f55 | |
parent | a5a0078def40933a890b33a16def67d50264e6eb (diff) | |
download | xK-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.
-rw-r--r-- | degesch.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -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); } |