input/curl: don't abort all requests on curl_multi_perform() error
Eliminate some complicated code that's not worth the trouble.
This commit is contained in:
parent
8b838ff9ea
commit
c9278bfcdf
@ -403,33 +403,6 @@ input_curl_easy_free_indirect(struct input_curl *c)
|
|||||||
assert(c->easy == nullptr);
|
assert(c->easy == nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Abort and free all HTTP requests.
|
|
||||||
*
|
|
||||||
* Runs in the I/O thread. The caller must not hold locks.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
input_curl_abort_all_requests(const Error &error)
|
|
||||||
{
|
|
||||||
assert(io_thread_inside());
|
|
||||||
assert(error.IsDefined());
|
|
||||||
|
|
||||||
while (!curl.requests.empty()) {
|
|
||||||
struct input_curl *c = curl.requests.front();
|
|
||||||
assert(!c->postponed_error.IsDefined());
|
|
||||||
|
|
||||||
input_curl_easy_free(c);
|
|
||||||
|
|
||||||
const ScopeLock protect(c->base.mutex);
|
|
||||||
|
|
||||||
c->postponed_error.Set(error);
|
|
||||||
c->base.ready = true;
|
|
||||||
|
|
||||||
c->base.cond.broadcast();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A HTTP request is finished.
|
* A HTTP request is finished.
|
||||||
*
|
*
|
||||||
@ -497,7 +470,7 @@ input_curl_info_read(void)
|
|||||||
*
|
*
|
||||||
* Runs in the I/O thread. The caller must not hold locks.
|
* Runs in the I/O thread. The caller must not hold locks.
|
||||||
*/
|
*/
|
||||||
static bool
|
static void
|
||||||
input_curl_perform(void)
|
input_curl_perform(void)
|
||||||
{
|
{
|
||||||
assert(io_thread_inside());
|
assert(io_thread_inside());
|
||||||
@ -509,16 +482,10 @@ input_curl_perform(void)
|
|||||||
mcode = curl_multi_perform(curl.multi, &running_handles);
|
mcode = curl_multi_perform(curl.multi, &running_handles);
|
||||||
} while (mcode == CURLM_CALL_MULTI_PERFORM);
|
} while (mcode == CURLM_CALL_MULTI_PERFORM);
|
||||||
|
|
||||||
if (mcode != CURLM_OK && mcode != CURLM_CALL_MULTI_PERFORM) {
|
if (mcode != CURLM_OK && mcode != CURLM_CALL_MULTI_PERFORM)
|
||||||
Error error;
|
FormatError(curlm_domain,
|
||||||
error.Format(curlm_domain, mcode,
|
"curl_multi_perform() failed: %s",
|
||||||
"curl_multi_perform() failed: %s",
|
curl_multi_strerror(mcode));
|
||||||
curl_multi_strerror(mcode));
|
|
||||||
input_curl_abort_all_requests(error);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -548,8 +515,8 @@ CurlSockets::PrepareSockets()
|
|||||||
void
|
void
|
||||||
CurlSockets::DispatchSockets()
|
CurlSockets::DispatchSockets()
|
||||||
{
|
{
|
||||||
if (input_curl_perform())
|
input_curl_perform();
|
||||||
input_curl_info_read();
|
input_curl_info_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user