From: Pietro Cerutti Date: Fri, 25 May 2018 11:21:38 +0000 (+0000) Subject: Explicitly allocate/free Groups memory X-Git-Tag: 2019-10-25~442^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=408c86b4e7478208dd54452926b87ebe42dde46e;p=neomutt Explicitly allocate/free Groups memory --- diff --git a/init.c b/init.c index e30c3f3c3..41b439bb7 100644 --- a/init.c +++ b/init.c @@ -2788,6 +2788,7 @@ void mutt_free_opts(void) mutt_regexlist_free(&UnMailLists); mutt_regexlist_free(&UnSubscribedLists); + mutt_groups_free(); mutt_hash_destroy(&ReverseAliases); mutt_hash_destroy(&TagFormats); mutt_hash_destroy(&TagTransforms); @@ -2864,6 +2865,7 @@ int mutt_init(bool skip_sys_rc, struct ListHead *commands) err.data = mutt_mem_malloc(err.dsize); err.dptr = err.data; + mutt_groups_init(); /* reverse alias keys need to be strdup'ed because of idna conversions */ ReverseAliases = mutt_hash_new(1031, MUTT_HASH_STRCASECMP | MUTT_HASH_STRDUP_KEYS | MUTT_HASH_ALLOW_DUPS); diff --git a/mutt/group.c b/mutt/group.c index 56947ae18..fcfcebfcf 100644 --- a/mutt/group.c +++ b/mutt/group.c @@ -39,14 +39,16 @@ #include "regex3.h" #include "string2.h" -static struct Hash *groups(void) +static struct Hash *Groups = NULL; + +void mutt_groups_init(void) { - static struct Hash *g = NULL; - if (g == NULL) - { - g = mutt_hash_new(1031, 0); - } - return g; + Groups = mutt_hash_new(1031, 0); +} + +void mutt_groups_free(void) +{ + mutt_hash_destroy(&Groups); } /** @@ -62,14 +64,14 @@ struct Group *mutt_pattern_group(const char *k) if (!k) return 0; - p = mutt_hash_find(groups(), k); + p = mutt_hash_find(Groups, k); if (!p) { mutt_debug(2, "Creating group %s.\n", k); p = mutt_mem_calloc(1, sizeof(struct Group)); p->name = mutt_str_strdup(k); STAILQ_INIT(&p->rs); - mutt_hash_insert(groups(), p->name, p); + mutt_hash_insert(Groups, p->name, p); } return p; @@ -83,7 +85,7 @@ static void group_remove(struct Group *g) { if (!g) return; - mutt_hash_delete(groups(), g->name, g); + mutt_hash_delete(Groups, g->name, g); mutt_addr_free(&g->as); mutt_regexlist_free(&g->rs); FREE(&g->name); diff --git a/mutt/group.h b/mutt/group.h index 653028bea..abf1e7b12 100644 --- a/mutt/group.h +++ b/mutt/group.h @@ -70,4 +70,7 @@ int mutt_group_context_remove_addrlist(struct GroupList *head, struct Address *a struct Group *mutt_pattern_group(const char *k); +void mutt_groups_init(void); +void mutt_groups_free(void); + #endif /* MUTT_GROUP_H */