diff options
author | Jean-Philippe Barette-LaPierre <jpbarrette@gmail.com> | 2003-02-04 23:48:46 +0000 |
---|---|---|
committer | Jean-Philippe Barette-LaPierre <jpbarrette@gmail.com> | 2003-02-04 23:48:46 +0000 |
commit | beb13a1d3e832ae97221ba1d9ad7f9bc262de798 (patch) | |
tree | 4d7a4a247c950e3959b9568d76df29df9d54ba8c /lib/share.c | |
parent | fa47138327a98195d0be2c8c2d741cee8763d74d (diff) | |
download | curl-beb13a1d3e832ae97221ba1d9ad7f9bc262de798.tar.gz |
added the sharing of DNS cache
Diffstat (limited to 'lib/share.c')
-rw-r--r-- | lib/share.c | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/lib/share.c b/lib/share.c index dcf7e90bb..8e5ec0ea0 100644 --- a/lib/share.c +++ b/lib/share.c @@ -65,12 +65,53 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...) /* this is a type this share will share */ type = va_arg(param, int); share->specifier |= (1<<type); + switch( type ) + { + case CURL_LOCK_DATA_DNS: + if (!share->hostcache) { + share->hostcache = Curl_hash_alloc(7, Curl_freednsinfo); + } + break; + + case CURL_LOCK_DATA_COOKIE: + break; + + case CURL_LOCK_DATA_SSL_SESSION: + break; + + case CURL_LOCK_DATA_CONNECT: + break; + + default: + return CURLSHE_BAD_OPTION; + } break; case CURLSHOPT_UNSHARE: /* this is a type this share will no longer share */ type = va_arg(param, int); share->specifier &= ~(1<<type); + switch( type ) + { + case CURL_LOCK_DATA_DNS: + if (share->hostcache) { + Curl_hash_destroy(share->hostcache); + share->hostcache = NULL; + } + break; + + case CURL_LOCK_DATA_COOKIE: + break; + + case CURL_LOCK_DATA_SSL_SESSION: + break; + + case CURL_LOCK_DATA_CONNECT: + break; + + default: + return CURLSHE_BAD_OPTION; + } break; case CURLSHOPT_LOCKFUNC: @@ -108,7 +149,7 @@ CURLSHcode curl_share_cleanup(CURLSH *sh) CURLSHcode -Curl_share_acquire_lock(struct SessionHandle *data, curl_lock_data type) +Curl_share_lock(struct SessionHandle *data, curl_lock_data type, curl_lock_access access) { struct Curl_share *share = data->share; @@ -116,8 +157,7 @@ Curl_share_acquire_lock(struct SessionHandle *data, curl_lock_data type) return CURLSHE_INVALID; if(share->specifier & (1<<type)) { - share->lockfunc (data, type, CURL_LOCK_ACCESS_SINGLE, share->clientdata); - share->locked |= (1<<type); + share->lockfunc (data, type, access, share->clientdata); } /* else if we don't share this, pretend successful lock */ @@ -125,7 +165,7 @@ Curl_share_acquire_lock(struct SessionHandle *data, curl_lock_data type) } CURLSHcode -Curl_share_release_lock(struct SessionHandle *data, curl_lock_data type) +Curl_share_unlock(struct SessionHandle *data, curl_lock_data type) { struct Curl_share *share = data->share; @@ -134,7 +174,6 @@ Curl_share_release_lock(struct SessionHandle *data, curl_lock_data type) if(share->specifier & (1<<type)) { share->unlockfunc (data, type, share->clientdata); - share->locked &= ~(1<<type); } return CURLSHE_OK; |