CURLSHOPT\_LOCKFUNC(3) Library Functions Manual CURLSHOPT\_LOCKFUNC(3)

# [NAME](#NAME)

CURLSHOPT\_LOCKFUNC - mutex lock callback

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
void lockcb(CURL *handle, curl_lock_data data, curl_lock_access access,


            void *clientp);
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_LOCKFUNC, lockcb);
```

# [DESCRIPTION](#DESCRIPTION)

Set a mutex lock callback for the share object, to allow it to get used by multiple threads concurrently. There is a corresponding [*CURLSHOPT\_UNLOCKFUNC(3)*](/man/os/curl/CURLSHOPT_UNLOCKFUNC.3) callback called when the mutex is again released.

The *lockcb* argument must be a pointer to a function matching the prototype shown above. The arguments to the callback are:

*handle* is the currently active easy handle in use when the share object is intended to get used.

The *data* argument tells what kind of data libcurl wants to lock. Make sure that the callback uses a different lock for each kind of data.

*access* defines what access type libcurl wants, shared or single.

*clientp* is the private pointer you set with [*CURLSHOPT\_USERDATA(3)*](/man/os/curl/CURLSHOPT_USERDATA.3). This pointer is not used by libcurl itself.

# [PROTOCOLS](#PROTOCOLS)

This functionality affects all supported protocols

# [EXAMPLE](#EXAMPLE)

```
extern void mutex_lock(CURL *handle, curl_lock_data data,


                       curl_lock_access access, void *clientp);
int main(void)
{


  CURLSHcode sh;


  CURLSH *share = curl_share_init();


  sh = curl_share_setopt(share, CURLSHOPT_LOCKFUNC, mutex_lock);


  if(sh)


    printf("Error: %s\n", curl_share_strerror(sh));
}
```

# [AVAILABILITY](#AVAILABILITY)

Added in curl 7.10.3

# [RETURN VALUE](#RETURN_VALUE)

CURLSHE\_OK (zero) means that the option was set properly, non-zero means an error occurred. See [*libcurl-errors(3)*](/man/os/curl/libcurl-errors.3) for the full list with descriptions.

# [SEE ALSO](#SEE_ALSO)

[**CURLSHOPT\_UNLOCKFUNC**(3)](/man/os/curl/CURLSHOPT_UNLOCKFUNC.3), [**curl\_share\_cleanup**(3)](/man/os/curl/curl_share_cleanup.3), [**curl\_share\_init**(3)](/man/os/curl/curl_share_init.3), [**curl\_share\_setopt**(3)](/man/os/curl/curl_share_setopt.3)

2026-10-31 libcurl

---

Document: CURLSHOPT_LOCKFUNC(3) from curl 8.23.0-r3 (Chainguard OS)
Source: https://github.com/curl/curl.git
