diff options
author | Will Dietz <w@wdtz.org> | 2018-05-24T21·23-0500 |
---|---|---|
committer | Will Dietz <w@wdtz.org> | 2018-06-09T02·12-0500 |
commit | 6bf7dc1baf272b37aa2731544f00491402d323ff (patch) | |
tree | 92ebdceb53df56c693ef45119a788637eda59fc6 | |
parent | 74144ae845a99d130ab6b5f110c17847c1539a93 (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.
-rw-r--r-- | src/libstore/download.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 7a5deed32143..29bb56ea1277 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) |