From 964e43c5e21482f9a0ff8f0be135c4ab8afa9330 Mon Sep 17 00:00:00 2001 From: Lindley French 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