]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: mail-index-view - Record caller source filename and line for mail_index_vi...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Sun, 5 Jul 2020 10:47:05 +0000 (12:47 +0200)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 4 Aug 2020 16:16:42 +0000 (18:16 +0200)
Before, this was only recorded for mail_index_view_open(), which caused the view
leak panic to show a useless source location, e.g.:

Panic: Leaked view for index <path>: Opened in (null):0

src/lib-index/mail-index-view-private.h
src/lib-index/mail-index-view.c

index ed059934b872ea89cd94545859b6cfbac11deb06..6d2705947fa0f41c6c11e6afe0b38f6a2dd82935 100644 (file)
@@ -87,9 +87,18 @@ struct mail_index_view *
 mail_index_view_open_with_map(struct mail_index *index,
                              struct mail_index_map *map);
 void mail_index_view_clone(struct mail_index_view *dest,
-                          const struct mail_index_view *src);
+                          const struct mail_index_view *src,
+                          const char *source_filename,
+                          unsigned int source_linenum);
+#define mail_index_view_clone(dest, src) \
+       mail_index_view_clone(dest, src, __FILE__, __LINE__)
+
 struct mail_index_view *
-mail_index_view_dup_private(const struct mail_index_view *src);
+mail_index_view_dup_private(const struct mail_index_view *src,
+                           const char *source_filename,
+                           unsigned int source_linenum);
+#define mail_index_view_dup_private(src) \
+       mail_index_view_dup_private(src, __FILE__, __LINE__)
 void mail_index_view_ref(struct mail_index_view *view);
 void mail_index_view_unref_maps(struct mail_index_view *view);
 void mail_index_view_add_hidden_transaction(struct mail_index_view *view,
index d51dbdda631a0fb3ef5f02204579bcb588902bad..d4d02ac23971a278a17d7b213abf6493e63c256c 100644 (file)
@@ -7,14 +7,19 @@
 #include "mail-index-view-private.h"
 #include "mail-transaction-log.h"
 
+#undef mail_index_view_clone
+#undef mail_index_view_dup_private
+
 struct mail_index_view *
-mail_index_view_dup_private(const struct mail_index_view *src)
+mail_index_view_dup_private(const struct mail_index_view *src,
+                           const char *source_filename,
+                           unsigned int source_linenum)
 {
        struct mail_index_view *view;
        struct mail_index_map *map;
 
        view = i_new(struct mail_index_view, 1);
-       mail_index_view_clone(view, src);
+       mail_index_view_clone(view, src, source_filename, source_linenum);
 
        map = mail_index_map_clone(view->map);
        mail_index_unmap(&view->map);
@@ -23,7 +28,9 @@ mail_index_view_dup_private(const struct mail_index_view *src)
 }
 
 void mail_index_view_clone(struct mail_index_view *dest,
-                          const struct mail_index_view *src)
+                          const struct mail_index_view *src,
+                          const char *source_filename,
+                          unsigned int source_linenum)
 {
        i_zero(dest);
        dest->refcount = 1;
@@ -48,6 +55,9 @@ void mail_index_view_clone(struct mail_index_view *dest,
        i_array_init(&dest->module_contexts,
                     I_MIN(5, mail_index_module_register.id));
 
+       dest->source_filename = source_filename;
+       dest->source_linenum = source_linenum;
+
        DLLIST_PREPEND(&dest->index->views, dest);
 }