]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
Dirk Manske's bugfix for the share stuff
authorDaniel Stenberg <daniel@haxx.se>
Mon, 11 Aug 2003 06:30:02 +0000 (06:30 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 11 Aug 2003 06:30:02 +0000 (06:30 +0000)
lib/share.c

index 9b5f79f9e867560efd1fb7b968dd3d6b2f94f152..37acef19543c10c3e0aed650ce4a4ba4014dcba9 100644 (file)
@@ -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 */