CRYPTO_LOCK(3) | Library Functions Manual | CRYPTO_LOCK(3)

# NAME

`CRYPTO_lock`, `CRYPTO_w_lock`, `CRYPTO_w_unlock`, `CRYPTO_r_lock`, `CRYPTO_r_unlock`, `CRYPTO_add` — thread support

# SYNOPSIS

library “libcrypto”
`#include <openssl/crypto.h>`

void
`CRYPTO_lock`(int mode, int type, const char *file, int line);

int
`CRYPTO_add`(int *p, int amount, int type);

    #define	CRYPTO_w_lock(type) \
    	CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE, type, __FILE__, __LINE__)
    #define	CRYPTO_w_unlock(type) \
    	CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE, type, __FILE__, __LINE__)
    #define	CRYPTO_r_lock(type) \
    	CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ, type, __FILE__, __LINE__)
    #define	CRYPTO_r_unlock(type) \
    	CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ, type, __FILE__, __LINE__)

# DESCRIPTION

These functions are obsolete.

`CRYPTO_lock`() locks or unlocks a mutex lock.

mode is a bitfield describing what should be done with the lock. For each call, either `CRYPTO_LOCK` or `CRYPTO_UNLOCK` must be included. In the LibreSSL implementation, `CRYPTO_READ` and `CRYPTO_WRITE` are ignored.

type is a number in the range 0 <= type < `CRYPTO_NUM_LOCKS` identifying a particular lock. Currently, the value of `CRYPTO_NUM_LOCKS` is 41.

The file and line arguments are ignored.

In the LibreSSL implementation, `CRYPTO_lock`() is a wrapper around pthread_mutex_lock(3) and pthread_mutex_unlock(3).

`CRYPTO_add`() locks the lock number type, adds amount to *p, and unlocks the lock number type again.

# RETURN VALUES

`CRYPTO_add`() returns the new value of *p.

# SEE ALSO

crypto(3)

# HISTORY

`CRYPTO_lock`(), `CRYPTO_w_lock`(), `CRYPTO_w_unlock`(), `CRYPTO_r_lock`(), and `CRYPTO_r_unlock`() first appeared in SSLeay 0.6.0. `CRYPTO_add`() first appeared in SSLeay 0.6.2. These functions have been available since OpenBSD 2.4.

June 8, 2025 | Debian