From 7226a48a8cff5637b865b64e39a6a937c20e7677 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Tue, 18 Sep 2012 18:33:55 +0300 Subject: [PATCH] Call xmlCleanupParser only once - when we are done with libxml Calling xmlCleanupParser in parse-xml.c:parse_xml_buffer() caused massive memory corruption mostly affecting gtk's FileChooser dialogs and the application menu. Signed-off-by: Lubomir I. Ivanov Signed-off-by: Dirk Hohndel --- dive.h | 1 + main.c | 3 +++ parse-xml.c | 6 +++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dive.h b/dive.h index 5637edf9f..d756eba15 100644 --- a/dive.h +++ b/dive.h @@ -385,6 +385,7 @@ static inline struct dive *get_dive(unsigned int nr) extern void parse_xml_init(void); extern void parse_xml_buffer(const char *url, const char *buf, int size, GError **error); +extern void parse_xml_exit(void); extern void set_filename(const char *filename, gboolean force); extern void parse_file(const char *filename, GError **error); diff --git a/main.c b/main.c index 2bdccd277..d3bd44335 100644 --- a/main.c +++ b/main.c @@ -253,5 +253,8 @@ int main(int argc, char **argv) show_dive_info(NULL); run_ui(); exit_ui(); + + parse_xml_exit(); + return 0; } diff --git a/parse-xml.c b/parse-xml.c index f47ac5a26..2a10792f8 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -1497,7 +1497,6 @@ void parse_xml_buffer(const char *url, const char *buffer, int size, GError **er traverse(xmlDocGetRootElement(doc)); dive_end(); xmlFreeDoc(doc); - xmlCleanupParser(); } void parse_xml_init(void) @@ -1505,6 +1504,11 @@ void parse_xml_init(void) LIBXML_TEST_VERSION } +void parse_xml_exit(void) +{ + xmlCleanupParser(); +} + #ifdef XSLT /* Maybe we'll want a environment variable that can override this.. */