summaryrefslogtreecommitdiff
path: root/lib/select.c
diff options
context:
space:
mode:
authorPeter Wang <novalazy@gmail.com>2014-07-29 06:33:07 +0200
committerDaniel Stenberg <daniel@haxx.se>2014-08-11 15:10:13 +0200
commit97d2e4bd75d1be26b48f37900b7b719c418e0ac6 (patch)
treefe32345ae1e0036d93fa2a66f58466e5ddff8930 /lib/select.c
parent33a95659e200f443cfe1ef6f057f71e5afe16f9d (diff)
downloadcurl-97d2e4bd75d1be26b48f37900b7b719c418e0ac6.tar.gz
Curl_poll + Curl_wait_ms: fix timeout return value
Curl_poll and Curl_wait_ms require the fix applied to Curl_socket_check in commits b61e8b8 and c771968: When poll or select are interrupted and coincides with the timeout elapsing, the functions return -1 indicating an error instead of 0 for the timeout.
Diffstat (limited to 'lib/select.c')
-rw-r--r--lib/select.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/select.c b/lib/select.c
index da3082dda..bb9b8b0db 100644
--- a/lib/select.c
+++ b/lib/select.c
@@ -108,8 +108,10 @@ int Curl_wait_ms(int timeout_ms)
if(error && error_not_EINTR)
break;
pending_ms = timeout_ms - elapsed_ms;
- if(pending_ms <= 0)
+ if(pending_ms <= 0) {
+ r = 0; /* Simulate a "call timed out" case */
break;
+ }
} while(r == -1);
#endif /* USE_WINSOCK */
if(r)
@@ -432,8 +434,10 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
break;
if(timeout_ms > 0) {
pending_ms = timeout_ms - elapsed_ms;
- if(pending_ms <= 0)
+ if(pending_ms <= 0) {
+ r = 0; /* Simulate a "call timed out" case */
break;
+ }
}
} while(r == -1);
@@ -517,8 +521,10 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
break;
if(timeout_ms > 0) {
pending_ms = timeout_ms - elapsed_ms;
- if(pending_ms <= 0)
+ if(pending_ms <= 0) {
+ r = 0; /* Simulate a "call timed out" case */
break;
+ }
}
} while(r == -1);