]> granicus.if.org Git - neomutt/commitdiff
Explicitly allocate/free Groups memory
authorPietro Cerutti <gahr@gahr.ch>
Fri, 25 May 2018 11:21:38 +0000 (11:21 +0000)
committerRichard Russon <rich@flatcap.org>
Wed, 12 Dec 2018 15:10:17 +0000 (15:10 +0000)
init.c
mutt/group.c
mutt/group.h

diff --git a/init.c b/init.c
index e30c3f3c377e89f3c437ce6b9beb75bed216a87a..41b439bb7cfd6ae4b1a411d19f24648d3f668496 100644 (file)
--- 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);
index 56947ae180568526b6a5898ea53e2fac92a93f65..fcfcebfcf5731d2907f6657ff5ad564b4e3342a6 100644 (file)
 #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);
index 653028bea52ffdddc48855f4d22ca3db60e80464..abf1e7b12faaeffcfa6efcecc597a103919a2afe 100644 (file)
@@ -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 */