mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +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 {
|
||||
CURLM* multiHandle;
|
||||
CURL* curl;
|
||||
HttpRequest request;
|
||||
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 {
|
||||
|
|
@ -40,10 +50,7 @@ public:
|
|||
}
|
||||
|
||||
virtual ~CurlRequests() {
|
||||
for (auto& entry : requests) {
|
||||
curl_multi_remove_handle(multiHandle, entry->curl);
|
||||
curl_easy_cleanup(entry->curl);
|
||||
}
|
||||
requests.clear();
|
||||
curl_multi_cleanup(multiHandle);
|
||||
}
|
||||
|
||||
|
|
@ -52,10 +59,8 @@ public:
|
|||
}
|
||||
|
||||
void processRequest(HttpRequest request) {
|
||||
auto curl = curl_easy_init();
|
||||
|
||||
auto entry = std::make_unique<ProcessingRequest>();
|
||||
entry->curl = curl;
|
||||
auto entry = std::make_unique<ProcessingRequest>(multiHandle);
|
||||
auto curl = entry->curl;
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, request.url.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";
|
||||
return;
|
||||
}
|
||||
auto& entry = *found;
|
||||
auto entry = std::move(*found);
|
||||
auto& req = entry->request;
|
||||
|
||||
requests.erase(found);
|
||||
|
||||
if(msg->msg == CURLMSG_DONE) {
|
||||
curl_multi_remove_handle(multiHandle, curl);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue