diff --git a/doc/man3/CRYPTO_THREAD_run_once.pod b/doc/man3/CRYPTO_THREAD_run_once.pod index 5cffc42026..a182359f47 100644 --- a/doc/man3/CRYPTO_THREAD_run_once.pod +++ b/doc/man3/CRYPTO_THREAD_run_once.pod @@ -5,7 +5,7 @@ CRYPTO_THREAD_run_once, CRYPTO_THREAD_lock_new, CRYPTO_THREAD_read_lock, CRYPTO_THREAD_write_lock, CRYPTO_THREAD_unlock, CRYPTO_THREAD_lock_free, -CRYPTO_atomic_add - OpenSSL thread support +CRYPTO_atomic_add, CRYPTO_atomic_or, CRYPTO_atomic_load - OpenSSL thread support =head1 SYNOPSIS @@ -21,6 +21,9 @@ CRYPTO_atomic_add - OpenSSL thread support void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); + int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); + int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); =head1 DESCRIPTION @@ -38,10 +41,10 @@ The following multi-threading function are provided: =item * CRYPTO_THREAD_run_once() can be used to perform one-time initialization. -The B argument must be a pointer to a static object of type +The I argument must be a pointer to a static object of type B that was statically initialized to the value B. -The B argument is a pointer to a function that performs the desired +The I argument is a pointer to a function that performs the desired exactly once initialization. In particular, this can be used to allocate locks in a thread-safe manner, which can then be used with the locking functions below. @@ -53,27 +56,47 @@ lock. =item * -CRYPTO_THREAD_read_lock() locks the provided B for reading. +CRYPTO_THREAD_read_lock() locks the provided I for reading. =item * -CRYPTO_THREAD_write_lock() locks the provided B for writing. +CRYPTO_THREAD_write_lock() locks the provided I for writing. =item * -CRYPTO_THREAD_unlock() unlocks the previously locked B. +CRYPTO_THREAD_unlock() unlocks the previously locked I. =item * -CRYPTO_THREAD_lock_free() frees the provided B. +CRYPTO_THREAD_lock_free() frees the provided I. =item * -CRYPTO_atomic_add() atomically adds B to B and returns the -result of the operation in B. B will be locked, unless atomic +CRYPTO_atomic_add() atomically adds I to I<*val> and returns the +result of the operation in I<*ret>. I will be locked, unless atomic operations are supported on the specific platform. Because of this, if a variable is modified by CRYPTO_atomic_add() then CRYPTO_atomic_add() must -be the only way that the variable is modified. +be the only way that the variable is modified. If atomic operations are not +supported and I is NULL, then the function will fail. + +=item * + +CRYPTO_atomic_or() performs an atomic bitwise or of I and I<*val> and stores +the result back in I<*val>. It also returns the result of the operation in +I<*ret>. I will be locked, unless atomic operations are supported on the +specific platform. Because of this, if a variable is modified by +CRYPTO_atomic_or() or read by CRYPTO_atomic_load() then CRYPTO_atomic_or() must +be the only way that the variable is modified. If atomic operations are not +supported and I is NULL, then the function will fail. + +=item * + +CRYPTO_atomic_load() atomically loads the contents of I<*val> into I<*ret>. +I will be locked, unless atomic operations are supported on the specific +platform. Because of this, if a variable is modified by CRYPTO_atomic_or() or +read by CRYPTO_atomic_load() then CRYPTO_atomic_load() must be the only way that +the variable is read. If atomic operations are not supported and I is +NULL, then the function will fail. =back