From: Michael Tremer Date: Thu, 15 Apr 2021 17:09:25 +0000 (+0000) Subject: downloader: Open temporary file when download is about to start X-Git-Tag: 0.9.28~1285^2~359 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a20c892bc1a9a4b862c6d69ee2769997ad4e2a78;p=pakfire.git downloader: Open temporary file when download is about to start Otherwise we might have a large number of file descriptors open. Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/downloader.c b/src/libpakfire/downloader.c index 0a82847dc..dbfc8367a 100644 --- a/src/libpakfire/downloader.c +++ b/src/libpakfire/downloader.c @@ -296,16 +296,6 @@ static struct pakfire_transfer* pakfire_downloader_create_transfer( // Follow any redirects curl_easy_setopt(transfer->handle, CURLOPT_FOLLOWLOCATION, 1); - // Open a temporary file to write the output to - transfer->f = pakfire_mktemp(transfer->tempfile); - if (!transfer->f) { - ERROR(downloader->pakfire, "Could not create temporary file for download %s: %s\n", - transfer->tempfile, strerror(errno)); - goto ERROR; - } - - curl_easy_setopt(transfer->handle, CURLOPT_WRITEDATA, transfer->f); - // Success return transfer; @@ -528,6 +518,18 @@ static int pakfire_downloader_prepare_transfer(struct pakfire_downloader* downlo return 1; } + // Open a temporary file to write the output to + if (!transfer->f) { + transfer->f = pakfire_mktemp(transfer->tempfile); + if (!transfer->f) { + ERROR(downloader->pakfire, "Could not create temporary file for download %s: %s\n", + transfer->tempfile, strerror(errno)); + return 1; + } + + curl_easy_setopt(transfer->handle, CURLOPT_WRITEDATA, transfer->f); + } + return 0; }