getsessionid: don't ever return while locked

Also, check for the session sharing bit instead of comparing pointers
This commit is contained in:
Daniel Stenberg 2011-11-17 23:55:36 +01:00
parent bb4eb58996
commit 10ecdf5078
1 changed files with 13 additions and 9 deletions

View File

@ -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;
}
/*