Subject: [PATCH] library init: be recursive

[PATCH] library init: be recursive

From: Alexander Klauer <Alexander.Klauer_at_itwm.fraunhofer.de>
Date: Thu, 14 Mar 2013 15:26:14 +0100

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 f0137a1..770e7c2 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();
-- 
1.7.9.5
Received on 2013-03-15