Skip to content
Snippets Groups Projects
Commit 10ecdf50 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

getsessionid: don't ever return while locked

Also, check for the session sharing bit instead of comparing pointers
parent bb4eb589
No related branches found
No related tags found
No related merge requests found
......@@ -233,14 +233,18 @@ int Curl_ssl_getsessionid(struct connectdata *conn,
struct SessionHandle *data = conn->data;
long i;
long *general_age;
bool no_match = TRUE;
*ssl_sessionid = NULL;
if(!conn->ssl_config.sessionid)
/* session ID re-use is disabled */
return TRUE;
/* Lock for reading if shared */
if(data->share && data->share->sslsession == data->state.session) {
Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SHARED);
/* Lock if shared */
if(data->share &&
(data->share->specifier & (1<<CURL_LOCK_DATA_SSL_SESSION)) ) {
Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SINGLE);
general_age = &data->share->sessionage;
}
else
......@@ -260,17 +264,17 @@ int Curl_ssl_getsessionid(struct connectdata *conn,
*ssl_sessionid = check->sessionid;
if(idsize)
*idsize = check->idsize;
return FALSE;
no_match = FALSE;
break;
}
}
*ssl_sessionid = NULL;
/* Unlock for reading */
if(data->share && data->share->sslsession == data->state.session)
/* Unlock */
if(data->share &&
(data->share->specifier & (1<<CURL_LOCK_DATA_SSL_SESSION)) )
Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
return TRUE;
return no_match;
}
/*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment