From 964e43c5e21482f9a0ff8f0be135c4ab8afa9330 Mon Sep 17 00:00:00 2001
From: Lindley French <lindleyf@gmail.com>
Date: Thu, 12 Jun 2014 11:36:41 -0700
Subject: [PATCH] conncache: move the connection counter to the cache struct

The static connection counter caused a race condition. Moving the
connection id counter into conncache solves it, as well as simplifying
the related logic.
---
 lib/conncache.c |  1 +
 lib/conncache.h |  1 +
 lib/url.c       | 14 +-------------
 3 files changed, 3 insertions(+), 13 deletions(-)

diff --git a/lib/conncache.c b/lib/conncache.c
index 3ee64157fd..290638ea00 100644
--- a/lib/conncache.c
+++ b/lib/conncache.c
@@ -149,6 +149,7 @@ CURLcode Curl_conncache_add_conn(struct conncache *connc,
     return result;
   }
 
+  conn->connection_id = connc->next_connection_id++;
   connc->num_connections++;
 
   return CURLE_OK;
diff --git a/lib/conncache.h b/lib/conncache.h
index f5e41f187b..691f061f94 100644
--- a/lib/conncache.h
+++ b/lib/conncache.h
@@ -25,6 +25,7 @@
 struct conncache {
   struct curl_hash *hash;
   size_t num_connections;
+  size_t next_connection_id;
 };
 
 struct conncache *Curl_conncache_init(int size);
diff --git a/lib/url.c b/lib/url.c
index fba3bd3917..770b0cc95e 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -3254,19 +3254,7 @@ ConnectionDone(struct SessionHandle *data, struct connectdata *conn)
 static CURLcode ConnectionStore(struct SessionHandle *data,
                                 struct connectdata *conn)
 {
-  static int connection_id_counter = 0;
-
-  CURLcode result;
-
-  /* Assign a number to the connection for easier tracking in the log
-     output */
-  conn->connection_id = connection_id_counter++;
-
-  result = Curl_conncache_add_conn(data->state.conn_cache, conn);
-  if(result != CURLE_OK)
-    conn->connection_id = -1;
-
-  return result;
+  return Curl_conncache_add_conn(data->state.conn_cache, conn);
 }
 
 /* after a TCP connection to the proxy has been verified, this function does
-- 
GitLab