Only initialize libcurl once.
This commit is contained in:
parent
10caa4c7e2
commit
81e579f162
|
@ -26,6 +26,9 @@ namespace mastodonpp
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
//! Internal use only.
|
||||||
|
extern bool curl_initialized;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Holds the access data of and the connection to an instance.
|
* @brief Holds the access data of and the connection to an instance.
|
||||||
*
|
*
|
||||||
|
@ -39,6 +42,11 @@ public:
|
||||||
/*!
|
/*!
|
||||||
* @brief Construct a new Instance object.
|
* @brief Construct a new Instance object.
|
||||||
*
|
*
|
||||||
|
* The first construction of an Instance object will call
|
||||||
|
* `curl_global_init`, which is not thread-safe. For more information
|
||||||
|
* consult [curl_global_init(3)]
|
||||||
|
* (https://curl.haxx.se/libcurl/c/curl_global_init.html).
|
||||||
|
*
|
||||||
* @param instance The hostname of the instance.
|
* @param instance The hostname of the instance.
|
||||||
* @param access_token Your access token.
|
* @param access_token Your access token.
|
||||||
*
|
*
|
||||||
|
|
|
@ -24,16 +24,29 @@ namespace mastodonpp
|
||||||
|
|
||||||
using std::move;
|
using std::move;
|
||||||
|
|
||||||
|
bool curl_initialized{false};
|
||||||
|
|
||||||
Instance::Instance(string instance, string access_token)
|
Instance::Instance(string instance, string access_token)
|
||||||
: _instance{move(instance)}
|
: _instance{move(instance)}
|
||||||
, _access_token{move(access_token)}
|
, _access_token{move(access_token)}
|
||||||
, _connection{curl_easy_init()}
|
|
||||||
{
|
{
|
||||||
|
if (!curl_initialized)
|
||||||
|
{
|
||||||
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||||
|
curl_initialized = true;
|
||||||
|
}
|
||||||
|
_connection = curl_easy_init();
|
||||||
setup_curl();
|
setup_curl();
|
||||||
}
|
}
|
||||||
Instance::~Instance()
|
Instance::~Instance()
|
||||||
{
|
{
|
||||||
curl_easy_cleanup(_connection);
|
curl_easy_cleanup(_connection);
|
||||||
|
|
||||||
|
if (curl_initialized)
|
||||||
|
{
|
||||||
|
curl_global_cleanup();
|
||||||
|
curl_initialized = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Instance::writer(char *data, size_t size, size_t nmemb, string *writerData)
|
int Instance::writer(char *data, size_t size, size_t nmemb, string *writerData)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user