From 022996e5c77e4a1bdf43f17a3562efee314478c3 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Sun, 12 Oct 2003 13:57:41 +0000
Subject: [PATCH] Dirk Manske made the share-locking around DNS lookups a bit
 "looser" so that multiple DNS lookups can run simultaneously faster. The
 downside is that resolving the same host name now can be made at once from
 multiple threads, but the upside is that threads now don't alwys have to wait
 for the others' resolves. Test case 506 updated accordingly.

---
 lib/hostip.c       | 13 +++++++++++--
 tests/data/test506 |  2 ++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/lib/hostip.c b/lib/hostip.c
index e82bbe10fc..e5363fa809 100644
--- a/lib/hostip.c
+++ b/lib/hostip.c
@@ -307,6 +307,9 @@ int Curl_resolv(struct connectdata *conn,
 
   /* See if its already in our dns cache */
   dns = Curl_hash_pick(data->hostcache, entry_id, entry_len+1);
+  
+  if(data->share)
+    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
 
   /* free the allocated entry_id again */
   free(entry_id);
@@ -332,12 +335,18 @@ int Curl_resolv(struct connectdata *conn,
       }
     }
     else
+    {
+      if(data->share)
+        Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
+
       /* we got a response, store it in the cache */
       dns = cache_resolv_response(data, addr, hostname, port);
+      
+      if(data->share)
+        Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
+    }
   }
 
-  if(data->share)
-    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
 
   *entry = dns;
 
diff --git a/tests/data/test506 b/tests/data/test506
index bb9ee3836a..1fbd4bac80 100644
--- a/tests/data/test506
+++ b/tests/data/test506
@@ -68,6 +68,8 @@ unlock: share   <Pigs in space>
 PERFORM
 lock:   dns     <Pigs in space>
 unlock: dns     <Pigs in space>
+lock:   dns     <Pigs in space>
+unlock: dns     <Pigs in space>
 lock:   cookie  <Pigs in space>
 unlock: cookie  <Pigs in space>
 lock:   cookie  <Pigs in space>
-- 
GitLab