Latest update.
This commit is contained in:
Regular → Executable
+15
-10
@@ -10,6 +10,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "internal/thread_once.h"
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/trace.h>
|
||||
@@ -218,6 +219,13 @@ static int trace_detach_cb(int category, int type, const void *data)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int do_ossl_trace_init(void);
|
||||
static CRYPTO_ONCE trace_inited = CRYPTO_ONCE_STATIC_INIT;
|
||||
DEFINE_RUN_ONCE_STATIC(ossl_trace_init)
|
||||
{
|
||||
return do_ossl_trace_init();
|
||||
}
|
||||
|
||||
static int set_trace_data(int category, int type, BIO **channel,
|
||||
const char **prefix, const char **suffix,
|
||||
int (*attach_cb)(int, int, const void *),
|
||||
@@ -227,8 +235,9 @@ static int set_trace_data(int category, int type, BIO **channel,
|
||||
char *curr_prefix = NULL;
|
||||
char *curr_suffix = NULL;
|
||||
|
||||
/* Ensure ossl_trace_init() is called */
|
||||
OPENSSL_init_crypto(0, NULL);
|
||||
/* Ensure do_ossl_trace_init() is called once */
|
||||
if (!RUN_ONCE(&trace_inited, ossl_trace_init))
|
||||
return 0;
|
||||
|
||||
curr_channel = trace_channels[category].bio;
|
||||
curr_prefix = trace_channels[category].prefix;
|
||||
@@ -297,19 +306,15 @@ static int set_trace_data(int category, int type, BIO **channel,
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
int ossl_trace_init(void)
|
||||
static int do_ossl_trace_init(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_TRACE
|
||||
trace_lock = CRYPTO_THREAD_lock_new();
|
||||
if (trace_lock == NULL)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
return trace_lock != NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void ossl_trace_cleanup(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_TRACE
|
||||
|
||||
Reference in New Issue
Block a user