getsessionid: don't ever return while locked
Also, check for the session sharing bit instead of comparing pointers
This commit is contained in:
parent
bb4eb58996
commit
10ecdf5078
22
lib/sslgen.c
22
lib/sslgen.c
@ -233,14 +233,18 @@ int Curl_ssl_getsessionid(struct connectdata *conn,
|
|||||||
struct SessionHandle *data = conn->data;
|
struct SessionHandle *data = conn->data;
|
||||||
long i;
|
long i;
|
||||||
long *general_age;
|
long *general_age;
|
||||||
|
bool no_match = TRUE;
|
||||||
|
|
||||||
|
*ssl_sessionid = NULL;
|
||||||
|
|
||||||
if(!conn->ssl_config.sessionid)
|
if(!conn->ssl_config.sessionid)
|
||||||
/* session ID re-use is disabled */
|
/* session ID re-use is disabled */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Lock for reading if shared */
|
/* Lock if shared */
|
||||||
if(data->share && data->share->sslsession == data->state.session) {
|
if(data->share &&
|
||||||
Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SHARED);
|
(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;
|
general_age = &data->share->sessionage;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -260,17 +264,17 @@ int Curl_ssl_getsessionid(struct connectdata *conn,
|
|||||||
*ssl_sessionid = check->sessionid;
|
*ssl_sessionid = check->sessionid;
|
||||||
if(idsize)
|
if(idsize)
|
||||||
*idsize = check->idsize;
|
*idsize = check->idsize;
|
||||||
return FALSE;
|
no_match = FALSE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*ssl_sessionid = NULL;
|
|
||||||
|
|
||||||
/* Unlock for reading */
|
/* Unlock */
|
||||||
if(data->share && data->share->sslsession == data->state.session)
|
if(data->share &&
|
||||||
|
(data->share->specifier & (1<<CURL_LOCK_DATA_SSL_SESSION)) )
|
||||||
Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
|
Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
|
||||||
|
|
||||||
|
return no_match;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user