From b8997743033449a996da70c3ac781d2c7937f3b8 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Thu, 11 Mar 2021 19:58:34 -0500 Subject: [PATCH] Run curl_global_cleanup only once per application --- src/tz.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/tz.cpp b/src/tz.cpp index 8b4576a..26babbd 100644 --- a/src/tz.cpp +++ b/src/tz.cpp @@ -2846,24 +2846,29 @@ file_exists(const std::string& filename) // CURL tools -static -int -curl_global() -{ - if (::curl_global_init(CURL_GLOBAL_DEFAULT) != 0) - throw std::runtime_error("CURL global initialization failed"); - return 0; -} - namespace { +struct curl_global_init_and_cleanup +{ + ~curl_global_init_and_cleanup() + { + ::curl_global_cleanup(); + } + curl_global_init_and_cleanup() + { + if (::curl_global_init(CURL_GLOBAL_DEFAULT) != 0) + throw std::runtime_error("CURL global initialization failed"); + } + curl_global_init_and_cleanup(curl_global_init_and_cleanup const&) = delete; + curl_global_init_and_cleanup& operator=(curl_global_init_and_cleanup const&) = delete; +}; + struct curl_deleter { void operator()(CURL* p) const { ::curl_easy_cleanup(p); - ::curl_global_cleanup(); } }; @@ -2873,8 +2878,7 @@ static std::unique_ptr curl_init() { - static const auto curl_is_now_initiailized = curl_global(); - (void)curl_is_now_initiailized; + static const curl_global_init_and_cleanup _{}; return std::unique_ptr{::curl_easy_init()}; }