crypto/threads_*: remove CRYPTO_atomic_{read|write}.
[openssl.git] / doc / man3 / CRYPTO_THREAD_run_once.pod
index b256a186370e06ef65a37cf892b3b302cd557eb6..32776131936c8a7a8000740b83dd59cfcd6fcb97 100644 (file)
@@ -4,7 +4,8 @@
 
 CRYPTO_THREAD_run_once,
 CRYPTO_THREAD_lock_new, CRYPTO_THREAD_read_lock, CRYPTO_THREAD_write_lock,
 
 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
 
 
 =head1 SYNOPSIS
 
@@ -64,7 +65,7 @@ CRYPTO_THREAD_unlock() unlocks the previously locked B<lock>.
 
 =item *
 
 
 =item *
 
-CRYPTO_THREAD_lock_frees() frees the provided B<lock>.
+CRYPTO_THREAD_lock_free() frees the provided B<lock>.
 
 =item *
 
 
 =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_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
 
 
 =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.
 
 
 This example safely initializes and uses a lock.
 
 #ifdef _WIN32
 # include <windows.h>
 #endif
 #include <openssl/crypto.h>
-
 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 <windows.h>
+ #endif
+ #include <openssl/crypto.h>
+
+ 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
 
 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 <openssl/opensslconf.h>
  #if defined(OPENSSL_THREADS)
 
  #include <openssl/opensslconf.h>
  #if defined(OPENSSL_THREADS)
-   // thread support enabled
+     /* thread support enabled */
  #else
  #else
-   // no thread support
+     /* no thread support */
  #endif
 
 =head1 SEE ALSO
  #endif
 
 =head1 SEE ALSO
@@ -160,7 +161,7 @@ L<crypto(7)>
 
 =head1 COPYRIGHT
 
 
 =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
 
 Licensed under the OpenSSL license (the "License").  You may not use
 this file except in compliance with the License.  You can obtain a copy