From: Stephan Bosch Date: Sun, 5 Jul 2020 10:47:05 +0000 (+0200) Subject: lib-index: mail-index-view - Record caller source filename and line for mail_index_vi... X-Git-Tag: 2.3.13~438 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fbeeffeef8c613b7625ed843a3ab6e594ee0a34e;p=thirdparty%2Fdovecot%2Fcore.git lib-index: mail-index-view - Record caller source filename and line for mail_index_view_clone/dup_private(). 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 : Opened in (null):0 --- diff --git a/src/lib-index/mail-index-view-private.h b/src/lib-index/mail-index-view-private.h index ed059934b8..6d2705947f 100644 --- a/src/lib-index/mail-index-view-private.h +++ b/src/lib-index/mail-index-view-private.h @@ -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, diff --git a/src/lib-index/mail-index-view.c b/src/lib-index/mail-index-view.c index d51dbdda63..d4d02ac239 100644 --- a/src/lib-index/mail-index-view.c +++ b/src/lib-index/mail-index-view.c @@ -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); }