diff -cwrbB curl-7.8.1.nt1/include/curl/curl.h curl-7.8.1.nt2/include/curl/curl.h
*** curl-7.8.1.nt1/include/curl/curl.h	Tue Sep  4 12:37:09 2001
--- curl-7.8.1.nt2/include/curl/curl.h	Tue Sep  4 12:37:44 2001
***************
*** 447,452 ****
--- 447,458 ----
     * handshake, set 1 to check existence, 2 to ensure that it matches the
     * provided hostname. */
    CINIT(SSL_VERIFYHOST, LONG, 81),
+ 
+   /* For global Cookielist in threading enviroment */
+   CINIT(COOKIES, OBJECTPOINT, 82),
+   CINIT(COOKIES_MUTEX, OBJECTPOINT, 83),
+   CINIT(COOKIES_LOCK, FUNCTIONPOINT, 84),
+   CINIT(COOKIES_UNLOCK, FUNCTIONPOINT, 85),
 
    CURLOPT_LASTENTRY /* the last unusued */
  } CURLoption;
diff -cwrbB curl-7.8.1.nt1/lib/http.c curl-7.8.1.nt2/lib/http.c
*** curl-7.8.1.nt1/lib/http.c	Fri Aug 17 12:14:06 2001
--- curl-7.8.1.nt2/lib/http.c	Tue Sep  4 12:39:13 2001
***************
*** 446,455 ****
--- 446,461 ----
    }
  
    if(data->cookies) {
+     if(data->cookies_lock && data->cookies_mutex){
+       data->cookies_lock(data->cookies_mutex);
+     }
      co = Curl_cookie_getlist(data->cookies,
                               host,
                               ppath,
                               conn->protocol&PROT_HTTPS?TRUE:FALSE);
+     if(data->cookies_unlock && data->cookies_mutex){
+       data->cookies_unlock(data->cookies_mutex);
+     }
    }
    if ((data->bits.httpproxy) && !(conn->protocol&PROT_HTTPS))  {
      /* The path sent to the proxy is in fact the entire URL */
diff -cwrbB curl-7.8.1.nt1/lib/transfer.c curl-7.8.1.nt2/lib/transfer.c
*** curl-7.8.1.nt1/lib/transfer.c	Tue Sep  4 12:37:09 2001
--- curl-7.8.1.nt2/lib/transfer.c	Tue Sep  4 12:37:44 2001
***************
*** 603,609 ****
--- 603,615 ----
                }
                else if(data->cookies &&
                        strnequal("Set-Cookie:", p, 11)) {
+                 if(data->cookies_lock && data->cookies_mutex){
+                   data->cookies_lock(data->cookies_mutex);
+                 }
                  Curl_cookie_add(data->cookies, TRUE, &p[12]);
+                 if(data->cookies_unlock && data->cookies_mutex){
+                   data->cookies_unlock(data->cookies_mutex);
+                 }
                }
                else if(strnequal("Last-Modified:", p,
                                  strlen("Last-Modified:")) &&
diff -cwrbB curl-7.8.1.nt1/lib/url.c curl-7.8.1.nt2/lib/url.c
*** curl-7.8.1.nt1/lib/url.c	Tue Sep  4 12:37:09 2001
--- curl-7.8.1.nt2/lib/url.c	Tue Sep  4 12:37:44 2001
***************
*** 496,501 ****
--- 496,525 ----
       */
      data->cookie = va_arg(param, char *);
      break;
+   case CURLOPT_COOKIES:
+     /*
+      * Set external cookielist
+      */
+     data->cookies = (void *)va_arg(param, void *);
+     break;
+   case CURLOPT_COOKIES_MUTEX:
+     /*
+      * Custom pointer to pass the cookie list lock function
+      */
+     data->cookies_mutex = (void *)va_arg(param, void *);
+     break;
+    case CURLOPT_COOKIES_LOCK:
+     /*
+      * Custom pointer to pass the cookie list lock function
+      */
+     data->cookies_lock = (void *)va_arg(param, void *);
+     break;
+   case CURLOPT_COOKIES_UNLOCK:
+     /*
+      * Custom pointer to pass the cookie list unlock function
+      */
+     data->cookies_unlock = (void *)va_arg(param, void *);
+     break;
    case CURLOPT_ERRORBUFFER:
      /*
       * Error buffer provided by the caller to get the human readable
diff -cwrbB curl-7.8.1.nt1/lib/urldata.h curl-7.8.1.nt2/lib/urldata.h
*** curl-7.8.1.nt1/lib/urldata.h	Tue Sep  4 12:37:09 2001
--- curl-7.8.1.nt2/lib/urldata.h	Tue Sep  4 12:37:44 2001
***************
*** 530,535 ****
--- 530,538 ----
    char *cert_passwd; /* plain text certificate password */
  
    struct CookieInfo *cookies;
+   void *cookies_mutex;
+   void (*cookies_lock)(void *);
+   void (*cookies_unlock)(void *);
  
    long crlf;
    struct curl_slist *quote;     /* before the transfer */
