#include <pakfire/xfer.h>
// The number of concurrent downloads
-#define MAX_PARALLEL 4
+#define DEFAULT_MAX_PARALLEL 4
struct pakfire_xfer_element {
TAILQ_ENTRY(pakfire_xfer_element) nodes;
// Progress
struct pakfire_progress* progress;
- int parallel;
+ // How many transfers in parallel?
+ long max_parallel;
// cURL share handle
CURLSH* share;
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;
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;
}
c->nrefs = 1;
// Set parallelism
- c->parallel = MAX_PARALLEL;
+ c->max_parallel = DEFAULT_MAX_PARALLEL;
// Init transfer queues
TAILQ_INIT(&c->xfers_queued);