diff options
| -rw-r--r-- | lib/curl_schannel.c | 24 | 
1 files changed, 14 insertions, 10 deletions
diff --git a/lib/curl_schannel.c b/lib/curl_schannel.c index f4e4619d1..863d4712d 100644 --- a/lib/curl_schannel.c +++ b/lib/curl_schannel.c @@ -1132,17 +1132,21 @@ int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)        Curl_safefree(connssl->ctxt);      } -    /* decrement the reference counter of the credential/session handle */ -    if(connssl->cred && connssl->cred->refcount > 0) { -      connssl->cred->refcount--; -      infof(data, "schannel: decremented credential handle refcount = %d\n", -            connssl->cred->refcount); -    } +    /* free SSPI Schannel API credential handle */ +    if(connssl->cred) { +      /* decrement the reference counter of the credential/session handle */ +      if(connssl->cred->refcount > 0) { +        connssl->cred->refcount--; +        infof(data, "schannel: decremented credential handle refcount = %d\n", +              connssl->cred->refcount); +      } -    /* if the handle refcount is zero, check if we have not cached it */ -    if(connssl->cred && connssl->cred->refcount == 0) { -      /* if the handle was not cached, it is stale to be freed */ -      if(!Curl_ssl_getsessionid(conn, (void**)&cached_cred, NULL)) { +      /* if the handle refcount is zero, check if we have not cached it */ +      if(connssl->cred->refcount == 0) { +        if(Curl_ssl_getsessionid(conn, (void**)&cached_cred, NULL)) { +          cached_cred = NULL; +        } +        /* if the handle was not cached, it is stale to be freed */          if(connssl->cred != cached_cred) {            infof(data, "schannel: clear credential handle\n");            s_pSecFn->FreeCredentialsHandle(&connssl->cred->cred_handle);  | 
