Abort curl downloads if there is no progress for 5 minutes

Maybe this will fix the curl hangs on macOS. (We could also use
CURLOPT_TIMEOUT but that seems more of a sledgehammer.)
This commit is contained in:
Eelco Dolstra 2017-09-01 16:51:26 +02:00
parent 7a108d904e
commit 8215b75d36
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -183,6 +183,8 @@ struct CurlDownloader : public Downloader
return 0;
}
long lowSpeedTimeout = 300;
void init()
{
if (!req) req = curl_easy_init();
@ -231,6 +233,9 @@ struct CurlDownloader : public Downloader
curl_easy_setopt(req, CURLOPT_CONNECTTIMEOUT, settings.connectTimeout.get());
curl_easy_setopt(req, CURLOPT_LOW_SPEED_LIMIT, 1L);
curl_easy_setopt(req, CURLOPT_LOW_SPEED_TIME, lowSpeedTimeout);
/* If no file exist in the specified path, curl continues to work
anyway as if netrc support was disabled. */
curl_easy_setopt(req, CURLOPT_NETRC_FILE, settings.netrcFile.get().c_str());
@ -422,7 +427,7 @@ struct CurlDownloader : public Downloader
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())
: 1000000000;
: 10000;
vomit("download thread waiting for %d ms", sleepTimeMs);
mc = curl_multi_wait(curlm, extraFDs, 1, sleepTimeMs, &numfds);
if (mc != CURLM_OK)