aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-05-05 07:17:37 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-05-05 07:17:37 +0000
commit7591e07b7c3715d92cc6b4fce664883b3f50898f (patch)
treea5b50ca9863884c22b76467c95c3053916757197 /lib
parent35ab93f48462cf6e5dc06c58b21342cb6870cbef (diff)
do the alarm time-left math using unsigned longs since that is what alarm()
returns and uses as input and converting to signed generates warnings and actually risks loss of accuracy
Diffstat (limited to 'lib')
-rw-r--r--lib/url.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/url.c b/lib/url.c
index 215a1bbd3..398815384 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -3174,14 +3174,16 @@ static CURLcode CreateConnection(struct SessionHandle *data,
the time we spent until now! */
if(prev_alarm) {
/* there was an alarm() set before us, now put it back */
- long elapsed_ms = Curl_tvdiff(Curl_tvnow(), conn->created);
- long alarm_set;
+ unsigned long elapsed_ms = Curl_tvdiff(Curl_tvnow(), conn->created);
+ unsigned long alarm_set;
/* the alarm period is counted in even number of seconds */
alarm_set = prev_alarm - elapsed_ms/1000;
-
- if(alarm_set<=0) {
- /* if it turned negative, we should fire off a SIGALRM here, but we
+
+ if(!alarm_set ||
+ ((alarm_set >= 0x80000000) && (prev_alarm < 0x80000000)) ) {
+ /* if the alarm time-left reached zero or turned "negative" (counted
+ with unsigned values), we should fire off a SIGALRM here, but we
won't, and zero would be to switch it off so we never set it to
less than 1! */
alarm(1);