summaryrefslogtreecommitdiffstats
path: root/src/libstore/download.cc
diff options
context:
space:
mode:
authorWill Dietz <w@wdtz.org>2018-05-24 16:23:05 -0500
committerWill Dietz <w@wdtz.org>2018-06-08 21:12:43 -0500
commit6bf7dc1baf272b37aa2731544f00491402d323ff (patch)
tree92ebdceb53df56c693ef45119a788637eda59fc6 /src/libstore/download.cc
parent74144ae845a99d130ab6b5f110c17847c1539a93 (diff)
download: if there are active requests, never sleep for 10s
In some versions/configurations libcurl doesn't handle timeouts (especially DNS timeouts) in a way that wakes curl_multi_wait. This doesn't appear to be a problem if using c-ares, FWIW.
Diffstat (limited to 'src/libstore/download.cc')
-rw-r--r--src/libstore/download.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index 7a5deed32..29bb56ea1 100644
--- a/src/libstore/download.cc
+++ b/src/libstore/download.cc
@@ -503,10 +503,11 @@ struct CurlDownloader : public Downloader
extraFDs[0].fd = wakeupPipe.readSide.get();
extraFDs[0].events = CURL_WAIT_POLLIN;
extraFDs[0].revents = 0;
+ long maxSleepTimeMs = items.empty() ? 10000 : 100;
auto sleepTimeMs =
nextWakeup != std::chrono::steady_clock::time_point()
? std::max(0, (int) std::chrono::duration_cast<std::chrono::milliseconds>(nextWakeup - std::chrono::steady_clock::now()).count())
- : 10000;
+ : maxSleepTimeMs;
vomit("download thread waiting for %d ms", sleepTimeMs);
mc = curl_multi_wait(curlm, extraFDs, 1, sleepTimeMs, &numfds);
if (mc != CURLM_OK)