diff options
author | Max Kellermann <max@duempel.org> | 2013-11-06 18:36:38 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-11-06 19:06:02 +0100 |
commit | c9278bfcdff3620f6fcec3a7980d096f9339d024 (patch) | |
tree | f5975f640130eec0b72bca4c167964dcfb4aafa4 | |
parent | 8b838ff9ea2a08c99275531ed5f6b5ddfe4406fe (diff) | |
download | mpd-c9278bfcdff3620f6fcec3a7980d096f9339d024.tar.gz mpd-c9278bfcdff3620f6fcec3a7980d096f9339d024.tar.xz mpd-c9278bfcdff3620f6fcec3a7980d096f9339d024.zip |
input/curl: don't abort all requests on curl_multi_perform() error
Eliminate some complicated code that's not worth the trouble.
-rw-r--r-- | src/input/CurlInputPlugin.cxx | 47 |
1 files changed, 7 insertions, 40 deletions
diff --git a/src/input/CurlInputPlugin.cxx b/src/input/CurlInputPlugin.cxx index 728a0c177..9869f5b58 100644 --- a/src/input/CurlInputPlugin.cxx +++ b/src/input/CurlInputPlugin.cxx @@ -404,33 +404,6 @@ input_curl_easy_free_indirect(struct input_curl *c) } /** - * 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. * * Runs in the I/O thread. The caller must not hold locks. @@ -497,7 +470,7 @@ input_curl_info_read(void) * * Runs in the I/O thread. The caller must not hold locks. */ -static bool +static void input_curl_perform(void) { assert(io_thread_inside()); @@ -509,16 +482,10 @@ input_curl_perform(void) mcode = curl_multi_perform(curl.multi, &running_handles); } while (mcode == CURLM_CALL_MULTI_PERFORM); - if (mcode != CURLM_OK && mcode != CURLM_CALL_MULTI_PERFORM) { - Error error; - error.Format(curlm_domain, mcode, - "curl_multi_perform() failed: %s", - curl_multi_strerror(mcode)); - input_curl_abort_all_requests(error); - return false; - } - - return true; + if (mcode != CURLM_OK && mcode != CURLM_CALL_MULTI_PERFORM) + FormatError(curlm_domain, + "curl_multi_perform() failed: %s", + curl_multi_strerror(mcode)); } int @@ -548,8 +515,8 @@ CurlSockets::PrepareSockets() void CurlSockets::DispatchSockets() { - if (input_curl_perform()) - input_curl_info_read(); + input_curl_perform(); + input_curl_info_read(); } /* |