]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-fs: Include file's path when logging pending error messages
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 16 Oct 2020 07:19:59 +0000 (10:19 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Fri, 23 Oct 2020 08:32:15 +0000 (08:32 +0000)
Otherwise it may not be known which file the error is about.

This happens when a file is freed without the last error being logged.
Also when an unlogged error is being replaced with a new error.

src/lib-fs/fs-api.c

index c7ae0476a55955afabeacd97fee2fc65f7b4f28a..67be9e6468f80d69d003f967ffe52f4ec6ee8633 100644 (file)
@@ -321,7 +321,8 @@ void fs_file_free(struct fs_file *file)
                   fs_file_last_error(). Log it to make sure it's not lost.
                   Note that the errors are always set only to the file at
                   the root of the parent hierarchy. */
-               e_error(file->event, "%s (in file deinit)", file->last_error);
+               e_error(file->event, "%s (in file %s deinit)",
+                       file->last_error, fs_file_path(file));
        }
 
        fs_file_deinit(&file->parent);
@@ -608,7 +609,8 @@ fs_set_verror(struct event *event, const char *fmt, va_list args)
                } else if (file->last_error_changed) {
                        /* multiple fs_set_error() calls used without
                           fs_file_last_error() in the middle. */
-                       e_error(file->event, "%s (overwriting error)", old_error);
+                       e_error(file->event, "%s (overwriting error for file %s)",
+                               old_error, fs_file_path(file));
                }
                if (errno == EAGAIN || errno == ENOENT || errno == EEXIST ||
                    errno == ENOTEMPTY) {
@@ -630,8 +632,8 @@ fs_set_verror(struct event *event, const char *fmt, va_list args)
                } else if (iter->last_error != NULL) {
                        /* multiple fs_set_error() calls before the iter
                           finishes */
-                       e_error(iter->fs->event, "%s (overwriting error)",
-                               iter->last_error);
+                       e_error(iter->fs->event, "%s (overwriting error for file %s)",
+                               iter->last_error, fs_file_path(file));
                }
                i_free(iter->last_error);
                iter->last_error = new_error;