mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-13 15:01:49 +00:00
fix curl handles lifetime
This commit is contained in:
parent
9510e06a26
commit
f44d3355f9
1 changed files with 16 additions and 9 deletions
|
|
@ -24,9 +24,19 @@ static size_t write_callback(
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ProcessingRequest {
|
struct ProcessingRequest {
|
||||||
|
CURLM* multiHandle;
|
||||||
CURL* curl;
|
CURL* curl;
|
||||||
HttpRequest request;
|
HttpRequest request;
|
||||||
std::vector<char> buffer;
|
std::vector<char> buffer;
|
||||||
|
|
||||||
|
ProcessingRequest(CURLM* multiHandle) : multiHandle(multiHandle) {
|
||||||
|
curl = curl_easy_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
~ProcessingRequest() {
|
||||||
|
curl_multi_remove_handle(multiHandle, curl);
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class CurlRequests : public Requests {
|
class CurlRequests : public Requests {
|
||||||
|
|
@ -40,10 +50,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~CurlRequests() {
|
virtual ~CurlRequests() {
|
||||||
for (auto& entry : requests) {
|
requests.clear();
|
||||||
curl_multi_remove_handle(multiHandle, entry->curl);
|
|
||||||
curl_easy_cleanup(entry->curl);
|
|
||||||
}
|
|
||||||
curl_multi_cleanup(multiHandle);
|
curl_multi_cleanup(multiHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,10 +59,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void processRequest(HttpRequest request) {
|
void processRequest(HttpRequest request) {
|
||||||
auto curl = curl_easy_init();
|
auto entry = std::make_unique<ProcessingRequest>(multiHandle);
|
||||||
|
auto curl = entry->curl;
|
||||||
auto entry = std::make_unique<ProcessingRequest>();
|
|
||||||
entry->curl = curl;
|
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, request.url.c_str());
|
curl_easy_setopt(curl, CURLOPT_URL, request.url.c_str());
|
||||||
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, request.method.c_str());
|
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, request.method.c_str());
|
||||||
|
|
@ -123,9 +128,11 @@ public:
|
||||||
logger.error() << "could not find request for cURL handle";
|
logger.error() << "could not find request for cURL handle";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto& entry = *found;
|
auto entry = std::move(*found);
|
||||||
auto& req = entry->request;
|
auto& req = entry->request;
|
||||||
|
|
||||||
|
requests.erase(found);
|
||||||
|
|
||||||
if(msg->msg == CURLMSG_DONE) {
|
if(msg->msg == CURLMSG_DONE) {
|
||||||
curl_multi_remove_handle(multiHandle, curl);
|
curl_multi_remove_handle(multiHandle, curl);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue