mirror of
https://github.com/HowardHinnant/date.git
synced 2025-08-04 13:14:26 +02:00
Run curl_global_cleanup only once per application
This commit is contained in:
28
src/tz.cpp
28
src/tz.cpp
@@ -2846,24 +2846,29 @@ file_exists(const std::string& filename)
|
|||||||
|
|
||||||
// CURL tools
|
// 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
|
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
|
struct curl_deleter
|
||||||
{
|
{
|
||||||
void operator()(CURL* p) const
|
void operator()(CURL* p) const
|
||||||
{
|
{
|
||||||
::curl_easy_cleanup(p);
|
::curl_easy_cleanup(p);
|
||||||
::curl_global_cleanup();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2873,8 +2878,7 @@ static
|
|||||||
std::unique_ptr<CURL, curl_deleter>
|
std::unique_ptr<CURL, curl_deleter>
|
||||||
curl_init()
|
curl_init()
|
||||||
{
|
{
|
||||||
static const auto curl_is_now_initiailized = curl_global();
|
static const curl_global_init_and_cleanup _{};
|
||||||
(void)curl_is_now_initiailized;
|
|
||||||
return std::unique_ptr<CURL, curl_deleter>{::curl_easy_init()};
|
return std::unique_ptr<CURL, curl_deleter>{::curl_easy_init()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user