Skip to content
Snippets Groups Projects
Commit 8dd06960 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Dirk Manske's bugfix for the share stuff

parent 5dadbd09
No related branches found
No related tags found
No related merge requests found
......@@ -39,8 +39,10 @@ curl_share_init(void)
{
struct Curl_share *share =
(struct Curl_share *)malloc(sizeof(struct Curl_share));
if (share)
if (share) {
memset (share, 0, sizeof(struct Curl_share));
share->specifier |= (1<<CURL_LOCK_DATA_SHARE);
}
return share;
}
......@@ -145,11 +147,21 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
return CURLSHE_OK;
}
CURLSHcode curl_share_cleanup(CURLSH *sh)
CURLSHcode
curl_share_cleanup(CURLSH *sh)
{
struct Curl_share *share = (struct Curl_share *)sh;
if (share->dirty)
if (share == NULL)
return CURLSHE_INVALID;
share->lockfunc(NULL, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE,
share->clientdata);
if (share->dirty) {
share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata);
return CURLSHE_IN_USE;
}
if(share->hostcache)
Curl_hash_destroy(share->hostcache);
......@@ -157,6 +169,7 @@ CURLSHcode curl_share_cleanup(CURLSH *sh)
if(share->cookies)
Curl_cookie_cleanup(share->cookies);
share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata);
free (share);
return CURLSHE_OK;
......@@ -173,7 +186,7 @@ Curl_share_lock(struct SessionHandle *data, curl_lock_data type,
return CURLSHE_INVALID;
if(share->specifier & (1<<type)) {
share->lockfunc (data, type, access, share->clientdata);
share->lockfunc(data, type, access, share->clientdata);
}
/* else if we don't share this, pretend successful lock */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment