mirror of
https://github.com/transmission/transmission.git
synced 2025-12-27 13:41:17 +00:00
refactor: convert tr_net_init_mgr to singleton (#6914)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user