2000-02-24 02:10:42 +08:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
2015-10-26 00:43:55 +08:00
|
|
|
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
|
2000-02-24 02:10:42 +08:00
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
#include <openssl/crypto.h>
|
|
|
|
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);
|
|
|
|
int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock);
|
|
|
|
int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock);
|
|
|
|
int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock);
|
|
|
|
void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock);
|
|
|
|
|
|
|
|
int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock);
|
2000-09-15 05:23:28 +08:00
|
|
|
|
2000-02-24 02:10:42 +08:00
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
2015-10-26 00:43:55 +08:00
|
|
|
OpenSSL can be safely used in multi-threaded applications provided that
|
|
|
|
support for the underlying OS threading API is built-in. Currently, OpenSSL
|
|
|
|
supports the pthread and Windows APIs. OpenSSL can also be built without
|
|
|
|
any multi-threading support, for example on platforms that don't provide
|
|
|
|
any threading support or that provide a threading API that is not yet
|
|
|
|
supported by OpenSSL.
|
|
|
|
|
|
|
|
The following multi-threading function are provided:
|
2008-08-06 23:54:15 +08:00
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item *
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_THREAD_lock_new() allocates, initializes and returns a new read/write
|
|
|
|
lock.
|
2008-08-06 23:54:15 +08:00
|
|
|
|
|
|
|
=item *
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_THREAD_read_lock() locks the provided B<lock> for reading.
|
2008-08-06 23:54:15 +08:00
|
|
|
|
|
|
|
=item *
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_THREAD_write_lock() locks the provided B<lock> for writing.
|
2008-08-06 23:54:15 +08:00
|
|
|
|
|
|
|
=item *
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_THREAD_unlock() unlocks the previously locked B<lock>.
|
2000-09-15 04:22:14 +08:00
|
|
|
|
2000-06-18 23:59:04 +08:00
|
|
|
=item *
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_THREAD_lock_frees() frees the provided B<lock>.
|
2000-06-18 23:59:04 +08:00
|
|
|
|
|
|
|
=item *
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_atomic_add() atomically adds B<amount> to B<val> and returns the
|
|
|
|
result of the operation in B<ret>. B<lock> 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.
|
2000-06-18 23:59:04 +08:00
|
|
|
|
2000-09-15 04:22:14 +08:00
|
|
|
=back
|
|
|
|
|
2000-02-24 09:20:31 +08:00
|
|
|
=head1 RETURN VALUES
|
2000-02-24 08:22:17 +08:00
|
|
|
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_THREAD_lock_new() returns the allocated lock, or NULL on error.
|
2000-06-18 23:59:04 +08:00
|
|
|
|
2015-10-26 00:43:55 +08:00
|
|
|
CRYPTO_THREAD_lock_frees() returns no value.
|
2000-06-18 23:59:04 +08:00
|
|
|
|
2015-10-26 00:43:55 +08:00
|
|
|
The other functions return 1 on success or 0 on error.
|
2000-02-24 08:22:17 +08:00
|
|
|
|
2005-06-18 13:52:16 +08:00
|
|
|
=head1 NOTES
|
2000-02-24 02:10:42 +08:00
|
|
|
|
|
|
|
You can find out if OpenSSL was configured with thread support:
|
|
|
|
|
|
|
|
#define OPENSSL_THREAD_DEFINES
|
|
|
|
#include <openssl/opensslconf.h>
|
2005-06-04 16:44:02 +08:00
|
|
|
#if defined(OPENSSL_THREADS)
|
2000-02-24 02:10:42 +08:00
|
|
|
// thread support enabled
|
|
|
|
#else
|
|
|
|
// no thread support
|
|
|
|
#endif
|
|
|
|
|
|
|
|
=head1 SEE ALSO
|
|
|
|
|
2015-08-18 03:21:33 +08:00
|
|
|
L<crypto(3)>
|
2000-02-24 02:10:42 +08:00
|
|
|
|
|
|
|
=cut
|