]> git.ozlabs.org Git - petitboot/commitdiff
discover/parser: free parsers on exit
authorJeremy Kerr <jk@ozlabs.org>
Fri, 18 Oct 2013 05:20:57 +0000 (13:20 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Mon, 21 Oct 2013 11:30:08 +0000 (19:30 +0800)
Allocate parsers against a context, and free that context on exit.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/parser.c

index b0668808cd859cfe7706ad5df870005878639a4e..e83b994e11cf1a3833f9cdd6bb6755590909f6df 100644 (file)
@@ -171,14 +171,25 @@ void iterate_parsers(struct discover_context *ctx, enum conf_method method)
        }
 }
 
        }
 }
 
+static void *parsers_ctx;
+
 void __register_parser(struct parser *parser)
 {
 void __register_parser(struct parser *parser)
 {
-       struct p_item* i = talloc(NULL, struct p_item);
+       struct p_item *i;
+
+       if (!parsers_ctx)
+               parsers_ctx = talloc_new(NULL);
 
 
+       i = talloc(parsers_ctx, struct p_item);
        i->parser = parser;
        list_add(&parsers, &i->list);
 }
 
        i->parser = parser;
        list_add(&parsers, &i->list);
 }
 
+static __attribute__((destructor)) void cleanup_parsers(void)
+{
+       talloc_free(parsers_ctx);
+}
+
 void parser_init(void)
 {
 }
 void parser_init(void)
 {
 }