From a20c892bc1a9a4b862c6d69ee2769997ad4e2a78 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 15 Apr 2021 17:09:25 +0000 Subject: [PATCH] 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 --- src/libpakfire/downloader.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) 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; } -- 2.47.3