refactor: convert tr_net_init_mgr to singleton (#6914)

This commit is contained in:
Yat Ho
2024-12-30 23:32:11 +08:00
committed by GitHub
parent 3842cec549
commit 131caa1239
13 changed files with 48 additions and 60 deletions

View File

@@ -733,36 +733,50 @@ std::string tr_env_get_string(std::string_view key, std::string_view default_val
// ---
tr_net_init_mgr::tr_net_init_mgr()
namespace
{
// try to init curl with default settings (currently ssl support + win32 sockets)
// but if that fails, we need to init win32 sockets as a bare minimum
if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK)
namespace tr_net_init_impl
{
class tr_net_init_mgr
{
private:
tr_net_init_mgr()
{
curl_global_init(CURL_GLOBAL_WIN32);
// try to init curl with default settings (currently ssl support + win32 sockets)
// but if that fails, we need to init win32 sockets as a bare minimum
if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK)
{
curl_global_init(CURL_GLOBAL_WIN32);
}
}
}
tr_net_init_mgr::~tr_net_init_mgr()
{
curl_global_cleanup();
}
std::unique_ptr<tr_net_init_mgr> tr_net_init_mgr::create()
{
if (!initialised)
public:
tr_net_init_mgr(tr_net_init_mgr const&) = delete;
tr_net_init_mgr(tr_net_init_mgr&&) = delete;
tr_net_init_mgr& operator=(tr_net_init_mgr const&) = delete;
tr_net_init_mgr& operator=(tr_net_init_mgr&&) = delete;
~tr_net_init_mgr()
{
initialised = true;
return std::unique_ptr<tr_net_init_mgr>{ new tr_net_init_mgr };
curl_global_cleanup();
}
return {};
}
bool tr_net_init_mgr::initialised = false;
static void create()
{
if (!instance)
{
instance = std::unique_ptr<tr_net_init_mgr>{ new tr_net_init_mgr };
}
}
std::unique_ptr<tr_net_init_mgr> tr_lib_init()
private:
static inline std::unique_ptr<tr_net_init_mgr> instance;
};
} // namespace tr_net_init_impl
} // namespace
void tr_lib_init()
{
return tr_net_init_mgr::create();
tr_net_init_impl::tr_net_init_mgr::create();
}
// --- mime-type