]> granicus.if.org Git - curl/commitdiff
vtls: set conn->data when closing TLS
authorDaniel Stenberg <daniel@haxx.se>
Fri, 20 Jul 2018 21:24:47 +0000 (23:24 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 22 Jul 2018 19:17:27 +0000 (21:17 +0200)
Follow-up to 1b76c38904f0. The VTLS backends that close down the TLS
layer for a connection still needs a Curl_easy handle for the session_id
cache etc.

Fixes #2764
Closes #2771

lib/conncache.c
lib/url.c

index 957ced3c7321d42506d4219415d856781ded9e37..6fbf3b1d270b02867ef749737bc9fde9882721e5 100644 (file)
@@ -314,7 +314,6 @@ void Curl_conncache_remove_conn(struct connectdata *conn, bool lock)
     if(lock) {
       CONN_LOCK(data);
     }
-    conn->data = NULL; /* detach */
     bundle_remove_conn(bundle, conn);
     if(bundle->num_connections == 0)
       conncache_remove_bundle(connc, bundle);
index 48d697b3c4b57eb7e70ea17f420a08c56bc7c706..5f520e91e19b55b039061a3835d8f9ad57cb074f 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -788,6 +788,9 @@ CURLcode Curl_disconnect(struct Curl_easy *data,
   free_fixed_hostname(&conn->http_proxy.host);
   free_fixed_hostname(&conn->socks_proxy.host);
 
+  DEBUGASSERT(conn->data == data);
+  /* this assumes that the pointer is still there after the connection was
+     detected from the cache */
   Curl_ssl_close(conn, FIRSTSOCKET);
 
   conn_free(conn);
@@ -969,6 +972,7 @@ static bool extract_if_dead(struct connectdata *conn,
     if(dead) {
       infof(data, "Connection %ld seems to be dead!\n", conn->connection_id);
       Curl_conncache_remove_conn(conn, FALSE);
+      conn->data = NULL; /* detach */
       return TRUE;
     }
   }