+2007-11-21 Alp Toker <alp@atoker.com>
+
+ Reviewed by Mark Rowe.
+
+ http://bugs.webkit.org/show_bug.cgi?id=16071
+ Curl backend handles EINTR incorrectly
+
+ Defer timers during select() to avoid interruption by timer signals.
+
+ * platform/network/curl/ResourceHandleManager.cpp:
+ (WebCore::ResourceHandleManager::downloadTimerCallback):
+
2007-11-21 Mark Rowe <mrowe@apple.com>
Reviewed by Tim Hatcher.
timeout.tv_sec = 0;
timeout.tv_usec = selectTimeoutMS * 1000; // select waits microseconds
+ // Temporarily disable timers since signals may interrupt select(), raising EINTR errors on some platforms
+ setDeferringTimers(true);
int rc = ::select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
+ setDeferringTimers(false);
if (-1 == rc) {
#ifndef NDEBUG
}
int runningHandles = 0;
- CURLMcode curlCode = CURLM_CALL_MULTI_PERFORM;
- while (CURLM_CALL_MULTI_PERFORM == curlCode) {
- curlCode = curl_multi_perform(m_curlMultiHandle, &runningHandles);
- }
+ while (curl_multi_perform(m_curlMultiHandle, &runningHandles) == CURLM_CALL_MULTI_PERFORM) { }
// check the curl messages indicating completed transfers
// and free their resources