From 10ecdf5078f1f096c3b2d247ef08d35b8fa96f4a Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 17 Nov 2011 23:55:36 +0100 Subject: getsessionid: don't ever return while locked Also, check for the session sharing bit instead of comparing pointers --- lib/sslgen.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/sslgen.c b/lib/sslgen.c index 23c07e73b..b9176b76c 100644 --- a/lib/sslgen.c +++ b/lib/sslgen.c @@ -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<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<