]> granicus.if.org Git - curl/commitdiff
Regression fix:
authorYang Tse <yangsita@gmail.com>
Thu, 6 Mar 2008 03:48:33 +0000 (03:48 +0000)
committerYang Tse <yangsita@gmail.com>
Thu, 6 Mar 2008 03:48:33 +0000 (03:48 +0000)
select/poll calls will only be retried upon EINTR failures as
it previously was in lib/select.c revision 1.29

In this way Curl_socket_ready() and Curl_poll() will again fail
on any select/poll errors different than EINTR.

CHANGES
RELEASE-NOTES
lib/select.c

diff --git a/CHANGES b/CHANGES
index fcc1e23690912e53498cc6460b3b2f15998fe827..6575a9aecf556818a663cb496487f51febcf248f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,10 @@
 
                                   Changelog
 
+Yang Tse (6 Mar 2008)
+- Fix regression on Curl_socket_ready() and Curl_poll() so that these will
+  again fail on select/poll errors different than EINTR.
+
 Daniel Fandrich (5 Mar 2008)
 - Fixed the test harness so it will write out zero-length data files.
 
index 41f82eadaf24828a9a4ece277d84c292faed74f3..7bbe7065bfdc2000cb21611a6eb008d5ca4a32be 100644 (file)
@@ -34,6 +34,7 @@ This release includes the following bugfixes:
  o crash when connection cache size is 1 and Curl_do() failed
  o GnuTLS-built libcurl can now be forced to prefer SSLv3
  o crash when doing Negotiate again on a re-used connection
+ o select/poll regression
 
 This release includes the following known bugs:
 
index 9482183b2f2889021972045fe2b045e8a45cf5f7..c305bc9fa45177d4700692173fbd596ceb6be1af 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -68,9 +68,9 @@
 #define elapsed_ms  (int)curlx_tvdiff(curlx_tvnow(), initial_tv)
 
 #ifdef CURL_ACKNOWLEDGE_EINTR
-#define error_is_EINTR  (error == EINTR)
+#define error_not_EINTR (1)
 #else
-#define error_is_EINTR  (0)
+#define error_not_EINTR (error != EINTR)
 #endif
 
 /*
@@ -129,7 +129,7 @@ static int wait_ms(int timeout_ms)
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if((error == EINVAL) || error_is_EINTR)
+    if(error && error_not_EINTR)
       break;
     pending_ms = timeout_ms - elapsed_ms;
     if(pending_ms <= 0)
@@ -219,7 +219,7 @@ int Curl_socket_ready(curl_socket_t readfd, curl_socket_t writefd,
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if((error == EINVAL) || error_is_EINTR)
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
       pending_ms = timeout_ms - elapsed_ms;
@@ -288,7 +288,7 @@ int Curl_socket_ready(curl_socket_t readfd, curl_socket_t writefd,
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if((error == EINVAL) || (error == EBADF) || error_is_EINTR)
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
       pending_ms = timeout_ms - elapsed_ms;
@@ -389,7 +389,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if((error == EINVAL) || error_is_EINTR)
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
       pending_ms = timeout_ms - elapsed_ms;
@@ -438,7 +438,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
     if(r != -1)
       break;
     error = SOCKERRNO;
-    if((error == EINVAL) || (error == EBADF) || error_is_EINTR)
+    if(error && error_not_EINTR)
       break;
     if(timeout_ms > 0) {
       pending_ms = timeout_ms - elapsed_ms;