From 2e0c3076e592d0d8ec4878aa800f24601f0a7321 Mon Sep 17 00:00:00 2001 From: Alexander Klauer Date: Thu, 14 Mar 2013 15:26:14 +0100 Subject: [PATCH] library init: be recursive Previously, a single call to ares_library_cleanup() would deinitialise the c-ares library, regardless of how many times ares_library_init() was called. This behaviour may cause problems in programs linking two or more libraries which, in turn, use c-ares. The present commit fixes this problem, deinitializing the library only after a number of calls to ares_library_cleanup() matching the number of calls to ares_library_init(). --- ares_library_init.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ares_library_init.c b/ares_library_init.c index f0137a18..770e7c23 100644 --- a/ares_library_init.c +++ b/ares_library_init.c @@ -101,7 +101,10 @@ int ares_library_init(int flags) int res; if (ares_initialized) - return ARES_SUCCESS; + { + ares_initialized++; + return ARES_SUCCESS; + } ares_initialized++; if (flags & ARES_LIB_INIT_WIN32) @@ -122,6 +125,8 @@ void ares_library_cleanup(void) if (!ares_initialized) return; ares_initialized--; + if (ares_initialized) + return; if (ares_init_flags & ARES_LIB_INIT_WIN32) ares_win32_cleanup();