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().
pull/10/merge
Alexander Klauer 12 years ago committed by Daniel Stenberg
parent 148c8e0353
commit 2e0c3076e5
  1. 5
      ares_library_init.c

@ -101,7 +101,10 @@ int ares_library_init(int flags)
int res; int res;
if (ares_initialized) if (ares_initialized)
{
ares_initialized++;
return ARES_SUCCESS; return ARES_SUCCESS;
}
ares_initialized++; ares_initialized++;
if (flags & ARES_LIB_INIT_WIN32) if (flags & ARES_LIB_INIT_WIN32)
@ -122,6 +125,8 @@ void ares_library_cleanup(void)
if (!ares_initialized) if (!ares_initialized)
return; return;
ares_initialized--; ares_initialized--;
if (ares_initialized)
return;
if (ares_init_flags & ARES_LIB_INIT_WIN32) if (ares_init_flags & ARES_LIB_INIT_WIN32)
ares_win32_cleanup(); ares_win32_cleanup();

Loading…
Cancel
Save