]> granicus.if.org Git - curl/commitdiff
fix the name resolve abort timeout calculation (when signals are used)
authorDaniel Stenberg <daniel@haxx.se>
Tue, 17 Oct 2006 08:05:41 +0000 (08:05 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 17 Oct 2006 08:05:41 +0000 (08:05 +0000)
lib/url.c

index 1b6f0bb7c8bf31d44e8d94dd9d17f391c91136ec..13670cf0be752d6b6512c08a02a51f1cf3c52177 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -3668,6 +3668,15 @@ static CURLcode CreateConnection(struct SessionHandle *data,
      * Set signal handler to catch SIGALRM
      * Store the old value to be able to set it back later!
      *************************************************************/
+    long shortest = data->set.timeout; /* default to this timeout value */
+
+    if(shortest && data->set.connecttimeout &&
+       (data->set.connecttimeout < shortest))
+      /* if both are set, pick the shortest */
+      shortest = data->set.connecttimeout;
+    else if(!shortest)
+      /* if timeout is not set, use the connect timeout */
+      shortest = data->set.connecttimeout
 
 #ifdef SIGALRM
 #ifdef HAVE_SIGACTION
@@ -3697,9 +3706,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
 #ifdef HAVE_ALARM
     /* alarm() makes a signal get sent when the timeout fires off, and that
        will abort system calls */
-    prev_alarm = alarm((unsigned int) (data->set.connecttimeout?
-                                       data->set.connecttimeout:
-                                       data->set.timeout));
+    prev_alarm = alarm((unsigned int) shortest);
     /* We can expect the conn->created time to be "now", as that was just
        recently set in the beginning of this function and nothing slow
        has been done since then until now. */