From: Michael Tremer Date: Mon, 12 Aug 2024 14:10:40 +0000 (+0000) Subject: httpclient: Tell cURL how many transfers we want to run in parallel X-Git-Tag: 0.9.30~1216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ace634773d07337786b139c1c15f335a67035fd4;p=pakfire.git httpclient: Tell cURL how many transfers we want to run in parallel Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/httpclient.c b/src/libpakfire/httpclient.c index 825fe5d8d..2af55f02c 100644 --- a/src/libpakfire/httpclient.c +++ b/src/libpakfire/httpclient.c @@ -32,7 +32,7 @@ #include // The number of concurrent downloads -#define MAX_PARALLEL 4 +#define DEFAULT_MAX_PARALLEL 4 struct pakfire_xfer_element { TAILQ_ENTRY(pakfire_xfer_element) nodes; @@ -54,7 +54,8 @@ struct pakfire_httpclient { // Progress struct pakfire_progress* progress; - int parallel; + // How many transfers in parallel? + long max_parallel; // cURL share handle CURLSH* share; @@ -94,7 +95,7 @@ static int pakfire_httpclient_start_transfers( int r; // Keep running until we have reached our ceiling - while (client->still_running < client->parallel) { + while (client->still_running < client->max_parallel) { // We are done if there are no more transfers in the queue if (TAILQ_EMPTY(&client->xfers_queued)) break; @@ -440,6 +441,15 @@ static int pakfire_httpclient_setup_curl(struct pakfire_httpclient* client) { return r; } + // Limit parallel transfers + r = curl_multi_setopt(client->curl, CURLMOPT_MAXCONNECTS, client->max_parallel); + if (r) { + CTX_ERROR(client->ctx, "Could not set max parallel transfers: %s\n", + curl_multi_strerror(r)); + + return r; + } + return 0; } @@ -516,7 +526,7 @@ int pakfire_httpclient_create(struct pakfire_httpclient** client, struct pakfire c->nrefs = 1; // Set parallelism - c->parallel = MAX_PARALLEL; + c->max_parallel = DEFAULT_MAX_PARALLEL; // Init transfer queues TAILQ_INIT(&c->xfers_queued);