]> granicus.if.org Git - curl/commitdiff
curl_schannel.c: mark session as removed from cache if not freed
authorMarc Hoersken <info@marc-hoersken.de>
Sat, 10 Jan 2015 16:46:02 +0000 (17:46 +0100)
committerMarc Hoersken <info@marc-hoersken.de>
Mon, 12 Jan 2015 20:56:05 +0000 (21:56 +0100)
If the session is still used by active SSL/TLS connections, it
cannot be closed yet. Thus we mark the session as not being cached
any longer so that the reference counting mechanism in
Curl_schannel_shutdown is used to close and free the session.

Reported-by: Jean-Francois Durand
lib/vtls/curl_schannel.c

index b3fe52695960291cf7877276c2cf26cb4836336a..787929c1daf7ed5912659d956cd4aac41758719b 100644 (file)
@@ -1218,9 +1218,14 @@ void Curl_schannel_session_free(void *ptr)
 {
   struct curl_schannel_cred *cred = ptr;
 
-  if(cred && cred->cached && cred->refcount == 0) {
-    s_pSecFn->FreeCredentialsHandle(&cred->cred_handle);
-    Curl_safefree(cred);
+  if(cred && cred->cached) {
+    if(cred->refcount == 0) {
+      s_pSecFn->FreeCredentialsHandle(&cred->cred_handle);
+      Curl_safefree(cred);
+    }
+    else {
+      cred->cached = FALSE;
+    }
   }
 }