From a0fb54b2928ef7d649b96069a21a5b83c9c3b288 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 15 Dec 2011 17:58:18 +0100 Subject: [PATCH] header: add HEADER->free_cb() to free driver specific data The mutt_free_header() need to care about driver specific data. BTW, it seems that there is a leak in imap code -- it does not free HEADER->data->keywords list. Signed-off-by: Karel Zak --- mutt.h | 1 + mutt_notmuch.c | 6 ++++-- muttlib.c | 8 +++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mutt.h b/mutt.h index def2ca894..7f8492d79 100644 --- a/mutt.h +++ b/mutt.h @@ -799,6 +799,7 @@ typedef struct header #if defined USE_POP || defined USE_IMAP || defined USE_NOTMUCH void *data; /* driver-specific data */ + void (*free_cb)(struct header *); /* driver-specific data free function */ #endif char *maildir_flags; /* unknown maildir flags */ diff --git a/mutt_notmuch.c b/mutt_notmuch.c index 0164922c1..b04f60c04 100644 --- a/mutt_notmuch.c +++ b/mutt_notmuch.c @@ -152,7 +152,7 @@ err: return -1; } -static void free_hdrdata(HEADER *h) +static void free_header_data(HEADER *h) { struct nm_hdrdata *data = h->data; @@ -174,7 +174,7 @@ static int free_data(CONTEXT *ctx) HEADER *h = ctx->hdrs[i]; if (h) - free_hdrdata(h); + free_header_data(h); } if (data) { @@ -393,6 +393,8 @@ static struct nm_hdrdata *create_hdrdata(HEADER *h, const char *path, data->id = safe_strdup(id); h->data = data; + h->free_cb = free_header_data; + init_message_tags(data, msg); return data; diff --git a/muttlib.c b/muttlib.c index 9dd8ac6ae..6c98dead6 100644 --- a/muttlib.c +++ b/muttlib.c @@ -32,6 +32,10 @@ #include "imap.h" #endif +#ifdef USE_NOTMUCH +#include "mutt_notmuch.h" +#endif + #include "mutt_crypt.h" #include @@ -330,7 +334,9 @@ void mutt_free_header (HEADER **h) #ifdef MIXMASTER mutt_free_list (&(*h)->chain); #endif -#if defined USE_POP || defined USE_IMAP +#if defined USE_POP || defined USE_IMAP || defined USE_NOTMUCH + if ((*h)->free_cb) + (*h)->free_cb(*h); FREE (&(*h)->data); #endif FREE (h); /* __FREE_CHECKED__ */ -- 2.49.0