gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [gnurl] 121/163: easy_perform: use *multi_timeout() to get


From: gnunet
Subject: [GNUnet-SVN] [gnurl] 121/163: easy_perform: use *multi_timeout() to get wait times
Date: Sun, 05 Aug 2018 12:37:27 +0200

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

ng0 pushed a commit to branch master
in repository gnurl.

commit 3ef67c6861c9d6236a4339d3446a444767598a58
Author: Daniel Stenberg <address@hidden>
AuthorDate: Tue Jun 26 18:11:32 2018 +0200

    easy_perform: use *multi_timeout() to get wait times
    
    ... and trim the threaded Curl_resolver_getsock() to return zero
    millisecond wait times during the first three milliseconds so that
    localhost or names in the OS resolver cache gets detected and used
    faster.
    
    Closes #2685
---
 lib/asyn-thread.c |  6 +++---
 lib/easy.c        | 23 ++++++-----------------
 2 files changed, 9 insertions(+), 20 deletions(-)

diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c
index 894ca459b..c7c1a0086 100644
--- a/lib/asyn-thread.c
+++ b/lib/asyn-thread.c
@@ -574,10 +574,10 @@ int Curl_resolver_getsock(struct connectdata *conn,
   (void)socks;
   (void)numsocks;
   ms = Curl_timediff(Curl_now(), reslv->start);
-  if(ms < 10)
-    milli = ms/3;
+  if(ms < 3)
+    milli = 0;
   else if(ms <= 50)
-    milli = 10;
+    milli = ms/3;
   else if(ms <= 250)
     milli = 50;
   else
diff --git a/lib/easy.c b/lib/easy.c
index bf85075e1..5af90e326 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -661,38 +661,27 @@ static CURLcode easy_transfer(struct Curl_multi *multi)
   bool done = FALSE;
   CURLMcode mcode = CURLM_OK;
   CURLcode result = CURLE_OK;
-  struct curltime before;
-  int without_fds = 0;  /* count number of consecutive returns from
-                           curl_multi_wait() without any filedescriptors */
 
   while(!done && !mcode) {
     int still_running = 0;
     int rc;
 
-    before = Curl_now();
     mcode = curl_multi_wait(multi, NULL, 0, 1000, &rc);
 
     if(!mcode) {
       if(!rc) {
-        struct curltime after = Curl_now();
+        long sleep_ms;
 
         /* If it returns without any filedescriptor instantly, we need to
            avoid busy-looping during periods where it has nothing particular
            to wait for */
-        if(Curl_timediff(after, before) <= 10) {
-          without_fds++;
-          if(without_fds > 2) {
-            int sleep_ms = without_fds < 10 ? (1 << (without_fds - 1)) : 1000;
-            Curl_wait_ms(sleep_ms);
-          }
+        curl_multi_timeout(multi, &sleep_ms);
+        if(sleep_ms) {
+          if(sleep_ms > 1000)
+            sleep_ms = 1000;
+          Curl_wait_ms((int)sleep_ms);
         }
-        else
-          /* it wasn't "instant", restart counter */
-          without_fds = 0;
       }
-      else
-        /* got file descriptor, restart counter */
-        without_fds = 0;
 
       mcode = curl_multi_perform(multi, &still_running);
     }

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



reply via email to

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