[pacman-dev] [PATCH] dload: avoid using CURLOPT_FAILONERROR
Use of this flag causes connections to be closed on 404s -- a common occurrence when your config sets DatabaseOptional. Handle the error gracefully, so that the connection can be reused. Signed-off-by: Dave Reisner <dreisner@archlinux.org> --- This might be an upstream bug, but I'm not sure it makes sense to continue using this, regardless. lib/libalpm/dload.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 53867f5..88ea427 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -286,7 +286,6 @@ static void curl_set_handle_opts(struct dload_payload *payload, * to reset the handle's parameters for each time it's used. */ curl_easy_reset(curl); curl_easy_setopt(curl, CURLOPT_URL, payload->fileurl); - curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buffer); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); curl_easy_setopt(curl, CURLOPT_FILETIME, 1L); @@ -478,12 +477,14 @@ static int curl_download_internal(struct dload_payload *payload, _alpm_log(handle, ALPM_LOG_DEBUG, "response code: %ld\n", payload->respcode); if(payload->respcode >= 400) { payload->unlink_on_fail = 1; - /* non-translated message is same as libcurl */ - snprintf(error_buffer, sizeof(error_buffer), - "The requested URL returned error: %ld", payload->respcode); - _alpm_log(handle, ALPM_LOG_ERROR, - _("failed retrieving file '%s' from %s : %s\n"), - payload->remote_name, hostname, error_buffer); + if(!payload->errors_ok) { + /* non-translated message is same as libcurl */ + snprintf(error_buffer, sizeof(error_buffer), + "The requested URL returned error: %ld", payload->respcode); + _alpm_log(handle, ALPM_LOG_ERROR, + _("failed retrieving file '%s' from %s : %s\n"), + payload->remote_name, hostname, error_buffer); + } goto cleanup; } break; -- 1.9.2
On 10/05/14 09:55, Dave Reisner wrote:
Use of this flag causes connections to be closed on 404s -- a common occurrence when your config sets DatabaseOptional. Handle the error gracefully, so that the connection can be reused.
Signed-off-by: Dave Reisner <dreisner@archlinux.org> --- This might be an upstream bug, but I'm not sure it makes sense to continue using this, regardless.
Looks good.
participants (2)
-
Allan McRae
-
Dave Reisner