Make it safe to call SSL_library_init more than once.
authorbeck <beck@openbsd.org>
Sat, 29 Apr 2017 21:54:54 +0000 (21:54 +0000)
committerbeck <beck@openbsd.org>
Sat, 29 Apr 2017 21:54:54 +0000 (21:54 +0000)
We are basically admitting that pthread is everywhere, and
we will be using it for other things too.
ok jsing@

lib/libssl/ssl_algs.c

index efbf1a4..ab88b29 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssl_algs.c,v 1.24 2017/03/01 14:01:24 jsing Exp $ */
+/* $OpenBSD: ssl_algs.c,v 1.25 2017/04/29 21:54:54 beck Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
 
 #include <openssl/lhash.h>
 #include <openssl/objects.h>
+#include <pthread.h>
 
 #include "ssl_locl.h"
 
-int
-SSL_library_init(void)
-{
+pthread_once_t SSL_library_init_once = PTHREAD_ONCE_INIT;
 
+static void
+SSL_library_init_internal(void)
+{
 #ifndef OPENSSL_NO_DES
        EVP_add_cipher(EVP_des_cbc());
        EVP_add_cipher(EVP_des_ede3_cbc());
@@ -125,6 +127,11 @@ SSL_library_init(void)
 #endif
        /* initialize cipher/digest methods table */
        ssl_load_ciphers();
-       return (1);
 }
 
+int
+SSL_library_init(void)
+{
+       pthread_once(&SSL_library_init_once, SSL_library_init_internal);
+       return 1;
+}