X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=doc%2Fman3%2FCRYPTO_THREAD_run_once.pod;h=32776131936c8a7a8000740b83dd59cfcd6fcb97;hp=b256a186370e06ef65a37cf892b3b302cd557eb6;hb=d2b863643d94704abd9840519cfc54d22d0481fe;hpb=2f61bc2ea306c059d8b00ddf32025a0b30346d8f diff --git a/doc/man3/CRYPTO_THREAD_run_once.pod b/doc/man3/CRYPTO_THREAD_run_once.pod index b256a18637..3277613193 100644 --- a/doc/man3/CRYPTO_THREAD_run_once.pod +++ b/doc/man3/CRYPTO_THREAD_run_once.pod @@ -4,7 +4,8 @@ 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_THREAD_unlock, CRYPTO_THREAD_lock_free, +CRYPTO_atomic_add - OpenSSL thread support =head1 SYNOPSIS @@ -64,7 +65,7 @@ CRYPTO_THREAD_unlock() unlocks the previously locked B. =item * -CRYPTO_THREAD_lock_frees() frees the provided B. +CRYPTO_THREAD_lock_free() frees the provided B. =item * @@ -82,9 +83,9 @@ CRYPTO_THREAD_run_once() returns 1 on success, or 0 on error. CRYPTO_THREAD_lock_new() returns the allocated lock, or NULL on error. -CRYPTO_THREAD_lock_frees() returns no value. +CRYPTO_THREAD_lock_free() returns no value. -The other functions return 1 on success or 0 on error. +The other functions return 1 on success, or 0 on error. =head1 NOTES @@ -100,42 +101,42 @@ crypto.h where use of CRYPTO_THREAD_* types and functions is required. This example safely initializes and uses a lock. - #ifdef _WIN32 - # include - #endif - #include - - static CRYPTO_ONCE once = CRYPTO_ONCE_STATIC_INIT; - static CRYPTO_RWLOCK *lock; - - static void myinit(void) - { - lock = CRYPTO_THREAD_lock_new(); - } - - static int mylock(void) - { - if (!CRYPTO_THREAD_run_once(&once, void init) || lock == NULL) - return 0; - return CRYPTO_THREAD_write_lock(lock); - } - - static int myunlock(void) - { - return CRYPTO_THREAD_unlock(lock); - } - - int serialized(void) - { - int ret = 0; - - if (mylock()) { - /* Your code here, do not return without releasing the lock! */ - ret = ... ; - } - myunlock(); - return ret; - } + #ifdef _WIN32 + # include + #endif + #include + + static CRYPTO_ONCE once = CRYPTO_ONCE_STATIC_INIT; + static CRYPTO_RWLOCK *lock; + + static void myinit(void) + { + lock = CRYPTO_THREAD_lock_new(); + } + + static int mylock(void) + { + if (!CRYPTO_THREAD_run_once(&once, void init) || lock == NULL) + return 0; + return CRYPTO_THREAD_write_lock(lock); + } + + static int myunlock(void) + { + return CRYPTO_THREAD_unlock(lock); + } + + int serialized(void) + { + int ret = 0; + + if (mylock()) { + /* Your code here, do not return without releasing the lock! */ + ret = ... ; + } + myunlock(); + return ret; + } Finalization of locks is an advanced topic, not covered in this example. This can only be done at process exit or when a dynamically loaded library is @@ -149,9 +150,9 @@ You can find out if OpenSSL was configured with thread support: #include #if defined(OPENSSL_THREADS) - // thread support enabled + /* thread support enabled */ #else - // no thread support + /* no thread support */ #endif =head1 SEE ALSO @@ -160,7 +161,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. Licensed under the OpenSSL license (the "License"). You may not use this file except in compliance with the License. You can obtain a copy