01-ini-fini.patch 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. --- contrib/libs/c-ares/src/lib/ares_library_init.c (index)
  2. +++ contrib/libs/c-ares/src/lib/ares_library_init.c (working tree)
  3. @@ -51,1 +54,1 @@ void *(*ares_malloc)(size_t size) = default_malloc;
  4. -int ares_library_init(int flags)
  5. +int ares_library_init_unsafe(int flags)
  6. @@ -82,1 +93,1 @@ int ares_library_init_mem(int flags,
  7. -void ares_library_cleanup(void)
  8. +void ares_library_cleanup_unsafe(void)
  9. @@ -110,1 +115,1 @@ void ares_library_cleanup(void)
  10. -int ares_library_initialized(void)
  11. +int ares_library_initialized_unsafe(void)
  12. @@ -140,3 +140,28 @@ int ares_library_initialized(void)
  13. #endif
  14. return ARES_SUCCESS;
  15. }
  16. +#include "atomic.h"
  17. +static atomic_t ares_init_lock;
  18. +int ares_library_init(int flags)
  19. +{
  20. + acquire_lock(&ares_init_lock);
  21. + int res = ares_library_init_unsafe(flags);
  22. + release_lock(&ares_init_lock);
  23. + return res;
  24. +}
  25. +
  26. +void ares_library_cleanup(void)
  27. +{
  28. + acquire_lock(&ares_init_lock);
  29. + ares_library_cleanup_unsafe();
  30. + release_lock(&ares_init_lock);
  31. +}
  32. +
  33. +
  34. +int ares_library_initialized(void)
  35. +{
  36. + acquire_lock(&ares_init_lock);
  37. + int res = ares_library_initialized_unsafe();
  38. + release_lock(&ares_init_lock);
  39. + return res;
  40. +}