gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnurl] 39/205: ares: better error return on timeouts


From: gnunet
Subject: [GNUnet-SVN] [gnurl] 39/205: ares: better error return on timeouts
Date: Thu, 20 Apr 2017 16:19:39 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to annotated tag gnurl-7.54.0
in repository gnurl.

commit bfaab3180ca53d683d514b33a7967e7c7835eab7
Author: Daniel Stenberg <address@hidden>
AuthorDate: Mon Mar 6 22:45:10 2017 +0100

    ares: better error return on timeouts
    
    Assisted-by: Ray Satiro
    
    Bug: https://curl.haxx.se/mail/lib-2017-03/0009.html
---
 lib/asyn-ares.c | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/lib/asyn-ares.c b/lib/asyn-ares.c
index ae73d0502..4baaef06a 100644
--- a/lib/asyn-ares.c
+++ b/lib/asyn-ares.c
@@ -368,7 +368,7 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
     timeout = CURL_TIMEOUT_RESOLVE * 1000; /* default name resolve timeout */
 
   /* Wait for the name resolve query to complete. */
-  for(;;) {
+  while(!result) {
     struct timeval *tvp, tv, store;
     long timediff;
     int itimeout;
@@ -390,28 +390,25 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata 
*conn,
       timeout_ms = 1000;
 
     waitperform(conn, timeout_ms);
-    Curl_resolver_is_resolved(conn, &temp_entry);
+    result = Curl_resolver_is_resolved(conn, &temp_entry);
 
-    if(conn->async.done)
+    if(result || conn->async.done)
       break;
 
-    if(Curl_pgrsUpdate(conn)) {
+    if(Curl_pgrsUpdate(conn))
       result = CURLE_ABORTED_BY_CALLBACK;
-      timeout = -1; /* trigger the cancel below */
-    }
     else {
       struct timeval now2 = Curl_tvnow();
       timediff = Curl_tvdiff(now2, now); /* spent time */
       timeout -= timediff?timediff:1; /* always deduct at least 1 */
       now = now2; /* for next loop */
     }
-
-    if(timeout < 0) {
-      /* our timeout, so we cancel the ares operation */
-      ares_cancel((ares_channel)data->state.resolver);
-      break;
-    }
+    if(timeout < 0)
+      result = CURLE_OPERATION_TIMEDOUT;
   }
+  if(result)
+    /* failure, so we cancel the ares operation */
+    ares_cancel((ares_channel)data->state.resolver);
 
   /* Operation complete, if the lookup was successful we now have the entry
      in the cache. */

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]