fix CurlRequests::update

This commit is contained in:
MihailRis 2026-09-13 19:41:26 +03:00
parent 432687c6ab
commit bb11a198f5
2 changed files with 41 additions and 17 deletions

View file

@ -8,4 +8,4 @@ end, function (code)
response_received = true
end)
app.sleep_until(function () return response_received end, nil, 10)
app.sleep_until(function () return response_received end, nil, 5)

View file

@ -114,7 +114,18 @@ public:
} else {
curl_easy_setopt(curl, CURLOPT_MAXFILESIZE, request.maxSize);
}
curl_multi_add_handle(multiHandle, curl);
{
CURLMcode res = curl_multi_add_handle(multiHandle, curl);
if (res != CURLM_OK) {
auto message = curl_multi_strerror(res);
logger.error() << message << " (" << request.url << ")";
if (request.onResponse) {
request.onResponse({0, {}, {}});
}
return;
}
}
{
int running;
CURLMcode res = curl_multi_perform(multiHandle, &running);
if (res != CURLM_OK) {
@ -125,15 +136,27 @@ public:
}
return;
}
}
entry->request = std::move(request);
requests.push_back(std::move(entry));
}
void update() override {
if (CURLMcode res = curl_multi_poll(
multiHandle,
nullptr,
0,
1000,
nullptr
)) {
auto message = curl_multi_strerror(res);
logger.error() << message;
return;
}
int messagesLeft;
int running;
CURLMcode res = curl_multi_perform(multiHandle, &running);
if (res != CURLM_OK) {
if (CURLMcode res = curl_multi_perform(multiHandle, &running)) {
auto message = curl_multi_strerror(res);
logger.error() << message;
return;
@ -155,6 +178,7 @@ public:
return;
}
auto entry = std::move(*found);
auto& req = entry->request;
requests.erase(found);
int response = -1;
@ -163,9 +187,9 @@ public:
auto headers = std::move(entry->headers);
if (response == 0) {
auto message = std::string(curl_easy_strerror(result));
logger.error() << message << " (" << entry->request.url << ")";
if (entry->request.onResponse) {
entry->request.onResponse(
logger.error() << message << " (" << req.url << ")";
if (req.onResponse) {
req.onResponse(
{response,
std::move(headers),
std::vector<char>(
@ -182,8 +206,8 @@ public:
totalDownload += size;
}
totalDownload += entry->buffer.size();
if (entry->request.onResponse) {
entry->request.onResponse({
if (req.onResponse) {
req.onResponse({
response,
std::move(headers),
std::move(entry->buffer),