summaryrefslogtreecommitdiff
path: root/src/lib/libtls/tls.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libtls/tls.c')
-rw-r--r--src/lib/libtls/tls.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c
index 4a9db289bd..c0430d7cd1 100644
--- a/src/lib/libtls/tls.c
+++ b/src/lib/libtls/tls.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls.c,v 1.76 2018/03/07 17:17:47 beck Exp $ */ 1/* $OpenBSD: tls.c,v 1.77 2018/03/07 19:07:13 deraadt Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -19,7 +19,6 @@
19 19
20#include <errno.h> 20#include <errno.h>
21#include <limits.h> 21#include <limits.h>
22#include <pthread.h>
23#include <stdlib.h> 22#include <stdlib.h>
24#include <unistd.h> 23#include <unistd.h>
25 24
@@ -36,35 +35,28 @@
36 35
37static struct tls_config *tls_config_default; 36static struct tls_config *tls_config_default;
38 37
39static int tls_init_rv = -1; 38int
40 39tls_init(void)
41static void
42tls_do_init(void)
43{ 40{
41 static int tls_initialised = 0;
42
43 if (tls_initialised)
44 return (0);
45
44 SSL_load_error_strings(); 46 SSL_load_error_strings();
45 SSL_library_init(); 47 SSL_library_init();
46 48
47 if (BIO_sock_init() != 1) 49 if (BIO_sock_init() != 1)
48 return; 50 return (-1);
49 51
50 if ((tls_config_default = tls_config_new()) == NULL) 52 if ((tls_config_default = tls_config_new()) == NULL)
51 return; 53 return (-1);
52 54
53 tls_config_default->refcount++; 55 tls_config_default->refcount++;
54 56
55 tls_init_rv = 0; 57 tls_initialised = 1;
56 return;
57}
58
59int
60tls_init(void)
61{
62 static pthread_once_t once = PTHREAD_ONCE_INIT;
63
64 if (pthread_once(&once, tls_do_init) != 0)
65 return -1;
66 58
67 return tls_init_rv; 59 return (0);
68} 60}
69 61
70const char * 62const char *