summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-11-25 14:58:55 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-11-25 15:00:37 +0100
commit8f50a5c7e517dee2dbdf01c0228c1baa6f03cdc1 (patch)
tree9a21e31903cfc5ea89904ab061c175ef3d9197b7 /lib
parent703fa0a6a8b8a8890b05292a0a07956c4f502e91 (diff)
downloadcurl-8f50a5c7e517dee2dbdf01c0228c1baa6f03cdc1.tar.gz
SSLSESSION_SHARED: new macro to check if session is shared
Added convenience macro to use to check if a handle is using a shared SSL session, and fixed so that Curl_ssl_close_all() doesn't lock when the session isn't shared.
Diffstat (limited to 'lib')
-rw-r--r--lib/sslgen.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/lib/sslgen.c b/lib/sslgen.c
index b9176b76c..9ad4ab1d2 100644
--- a/lib/sslgen.c
+++ b/lib/sslgen.c
@@ -66,6 +66,11 @@
/* 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)
@@ -242,8 +247,7 @@ int Curl_ssl_getsessionid(struct connectdata *conn,
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;
}
@@ -270,8 +274,7 @@ int Curl_ssl_getsessionid(struct connectdata *conn,
}
/* 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;
@@ -310,7 +313,7 @@ void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid)
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);
@@ -323,7 +326,7 @@ void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid)
}
}
- if(data->share && data->share->sslsession == data->state.session)
+ if(SSLSESSION_SHARED(data))
Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
}
@@ -356,7 +359,7 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
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;
}
@@ -390,7 +393,7 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
/* 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)) {
@@ -406,12 +409,8 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
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]);
@@ -419,8 +418,6 @@ void Curl_ssl_close_all(struct SessionHandle *data)
/* 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);