From 97fada5536ca3f502088da86e67a8d57dc324ddb Mon Sep 17 00:00:00 2001 From: beck Date: Sat, 29 Apr 2017 21:54:54 +0000 Subject: [PATCH] Make it safe to call SSL_library_init more than once. 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 | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/libssl/ssl_algs.c b/lib/libssl/ssl_algs.c index efbf1a4f310..ab88b29cc16 100644 --- a/lib/libssl/ssl_algs.c +++ b/lib/libssl/ssl_algs.c @@ -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. * @@ -60,13 +60,15 @@ #include #include +#include #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; +} -- 2.20.1