From 1dbd947a66b07726578e1a76e46c3b32a417d4ee Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Sun, 22 Aug 2010 12:13:24 +0300 Subject: [PATCH] obexd: Fix issues caused by multiple dependencies on phonebook.c Previously only PBAP depended on phonebook.c. Now IrMC Sync also depends on it. That means that phonebook_init and phonebook_exit need to be able to handle multiple calls or else memory leaks and double-free's are likely. This patch adds safeguards for this to the _init and _exit functions that need it. --- obexd/plugins/phonebook-dummy.c | 4 ++++ obexd/plugins/phonebook-ebook.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/obexd/plugins/phonebook-dummy.c b/obexd/plugins/phonebook-dummy.c index 1c0135ead..7c549faa5 100644 --- a/obexd/plugins/phonebook-dummy.c +++ b/obexd/plugins/phonebook-dummy.c @@ -86,6 +86,9 @@ static void query_free(void *user_data) int phonebook_init(void) { + if (root_folder) + return 0; + /* FIXME: It should NOT be hard-coded */ root_folder = g_build_filename(getenv("HOME"), "phonebook", NULL); @@ -95,6 +98,7 @@ int phonebook_init(void) void phonebook_exit(void) { g_free(root_folder); + root_folder = NULL; } static int handle_cmp(gconstpointer a, gconstpointer b) diff --git a/obexd/plugins/phonebook-ebook.c b/obexd/plugins/phonebook-ebook.c index da68ac080..073ff331e 100644 --- a/obexd/plugins/phonebook-ebook.c +++ b/obexd/plugins/phonebook-ebook.c @@ -295,6 +295,9 @@ int phonebook_init(void) { GError *gerr = NULL; + if (ebook) + return 0; + g_type_init(); ebook = e_book_new_default_addressbook(&gerr); @@ -318,6 +321,7 @@ void phonebook_exit(void) { if (ebook) g_object_unref(ebook); + ebook = NULL; } char *phonebook_set_folder(const char *current_folder, -- 2.47.3