/* The last #include file should be: */
#include "memdebug.h"
+/* convenience macro to check if this handle is using a shared SSL session */
+#define SSLSESSION_SHARED(data) (data->share && \
+ (data->share->specifier & \
+ (1<<CURL_LOCK_DATA_SSL_SESSION)))
+
static bool safe_strequal(char* str1, char* str2)
{
if(str1 && str2)
return TRUE;
/* Lock if shared */
- if(data->share &&
- (data->share->specifier & (1<<CURL_LOCK_DATA_SSL_SESSION)) ) {
+ if(SSLSESSION_SHARED(data)) {
Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SINGLE);
general_age = &data->share->sessionage;
}
}
/* Unlock */
- if(data->share &&
- (data->share->specifier & (1<<CURL_LOCK_DATA_SSL_SESSION)) )
+ if(SSLSESSION_SHARED(data))
Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
return no_match;
int i;
struct SessionHandle *data=conn->data;
- if(data->share && data->share->sslsession == data->state.session)
+ if(SSLSESSION_SHARED(data))
Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION,
CURL_LOCK_ACCESS_SINGLE);
}
}
- if(data->share && data->share->sslsession == data->state.session)
+ if(SSLSESSION_SHARED(data))
Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
}
the oldest if necessary) */
/* If using shared SSL session, lock! */
- if(data->share && data->share->sslsession == data->state.session) {
+ if(SSLSESSION_SHARED(data)) {
Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SINGLE);
general_age = &data->share->sessionage;
}
/* Unlock */
- if(data->share && data->share->sslsession == data->state.session)
+ if(SSLSESSION_SHARED(data))
Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
if(!Curl_clone_ssl_config(&conn->ssl_config, &store->ssl_config)) {
void Curl_ssl_close_all(struct SessionHandle *data)
{
long i;
- /* kill the session ID cache */
- if(data->state.session &&
- !(data->share && data->share->sslsession == data->state.session)) {
-
- Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SINGLE);
-
+ /* kill the session ID cache if not shared */
+ if(data->state.session && !SSLSESSION_SHARED(data)) {
for(i=0; i< data->set.ssl.numsessions; i++)
/* the single-killer function handles empty table slots */
Curl_ssl_kill_session(&data->state.session[i]);
/* free the cache data */
free(data->state.session);
data->state.session = NULL;
-
- Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
}
curlssl_close_all(data);