mirror of https://github.com/yandex/odyssey.git
machinarium: move tls init out from tls io
This commit is contained in:
parent
9dcdda4753
commit
f36d2231c8
|
@ -21,8 +21,9 @@ set(machine_src thread.c
|
|||
channel.c
|
||||
queue.c
|
||||
task_mgr.c
|
||||
tls_api.c
|
||||
tls.c
|
||||
tls_io.c
|
||||
tls_api.c
|
||||
io.c
|
||||
close.c
|
||||
connect.c
|
||||
|
|
|
@ -74,8 +74,10 @@
|
|||
#include "machine_mgr.h"
|
||||
#include "mm.h"
|
||||
|
||||
#include "tls.h"
|
||||
#include "tls_api.h"
|
||||
#include "tls_io.h"
|
||||
|
||||
#include "io.h"
|
||||
#include "read.h"
|
||||
#include "write.h"
|
||||
|
|
|
@ -183,7 +183,7 @@ MACHINE_API int
|
|||
machine_read(machine_io_t *obj, char *buf, int size, uint32_t time_ms)
|
||||
{
|
||||
mm_io_t *io = mm_cast(mm_io_t*, obj);
|
||||
if (mm_tls_is_active(&io->tls))
|
||||
if (mm_tlsio_is_active(&io->tls))
|
||||
return mm_tlsio_read(&io->tls, buf, size, time_ms);
|
||||
return mm_read(io, buf, size, time_ms);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
|
||||
/*
|
||||
* machinarium.
|
||||
*
|
||||
* cooperative multitasking engine.
|
||||
*/
|
||||
|
||||
#include <machinarium.h>
|
||||
#include <machinarium_private.h>
|
||||
|
||||
static pthread_mutex_t *mm_tls_locks;
|
||||
|
||||
static void
|
||||
mm_tls_thread_id(CRYPTO_THREADID *tid)
|
||||
{
|
||||
CRYPTO_THREADID_set_numeric(tid, (unsigned long)pthread_self());
|
||||
}
|
||||
|
||||
static void
|
||||
mm_tls_locking_callback(int mode, int type, const char *file, int line)
|
||||
{
|
||||
(void)file;
|
||||
(void)line;
|
||||
if (mode & CRYPTO_LOCK)
|
||||
pthread_mutex_lock(&mm_tls_locks[type]);
|
||||
else
|
||||
pthread_mutex_unlock(&mm_tls_locks[type]);
|
||||
}
|
||||
|
||||
void mm_tls_init(void)
|
||||
{
|
||||
SSL_library_init();
|
||||
SSL_load_error_strings();
|
||||
int size = CRYPTO_num_locks() * sizeof(pthread_mutex_t);
|
||||
mm_tls_locks = OPENSSL_malloc(size);
|
||||
if (mm_tls_locks == NULL) {
|
||||
abort();
|
||||
return;
|
||||
}
|
||||
int i = 0;
|
||||
for (; i < CRYPTO_num_locks(); i++)
|
||||
pthread_mutex_init(&mm_tls_locks[i], NULL);
|
||||
CRYPTO_THREADID_set_callback(mm_tls_thread_id);
|
||||
CRYPTO_set_locking_callback(mm_tls_locking_callback);
|
||||
}
|
||||
|
||||
void mm_tls_free(void)
|
||||
{
|
||||
CRYPTO_set_locking_callback(NULL);
|
||||
int i = 0;
|
||||
for (; i < CRYPTO_num_locks(); i++)
|
||||
pthread_mutex_destroy(&mm_tls_locks[i]);
|
||||
OPENSSL_free(mm_tls_locks);
|
||||
#if 0
|
||||
SSL_COMP_free_compression_methods();
|
||||
#endif
|
||||
FIPS_mode_set(0);
|
||||
ENGINE_cleanup();
|
||||
CONF_modules_unload(1);
|
||||
EVP_cleanup();
|
||||
CRYPTO_cleanup_all_ex_data();
|
||||
ERR_remove_state(getpid());
|
||||
ERR_free_strings();
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef MM_TLS_H
|
||||
#define MM_TLS_H
|
||||
|
||||
/*
|
||||
* machinarium.
|
||||
*
|
||||
* cooperative multitasking engine.
|
||||
*/
|
||||
|
||||
void mm_tls_init(void);
|
||||
void mm_tls_free(void);
|
||||
|
||||
#endif /* MM_TLS_H */
|
|
@ -8,61 +8,6 @@
|
|||
#include <machinarium.h>
|
||||
#include <machinarium_private.h>
|
||||
|
||||
static pthread_mutex_t *mm_tls_locks;
|
||||
|
||||
static void
|
||||
mm_tls_thread_id(CRYPTO_THREADID *tid)
|
||||
{
|
||||
CRYPTO_THREADID_set_numeric(tid, (unsigned long)pthread_self());
|
||||
}
|
||||
|
||||
static void
|
||||
mm_tls_locking_callback(int mode, int type, const char *file, int line)
|
||||
{
|
||||
(void)file;
|
||||
(void)line;
|
||||
if (mode & CRYPTO_LOCK)
|
||||
pthread_mutex_lock(&mm_tls_locks[type]);
|
||||
else
|
||||
pthread_mutex_unlock(&mm_tls_locks[type]);
|
||||
}
|
||||
|
||||
void mm_tls_init(void)
|
||||
{
|
||||
SSL_library_init();
|
||||
SSL_load_error_strings();
|
||||
int size = CRYPTO_num_locks() * sizeof(pthread_mutex_t);
|
||||
mm_tls_locks = OPENSSL_malloc(size);
|
||||
if (mm_tls_locks == NULL) {
|
||||
abort();
|
||||
return;
|
||||
}
|
||||
int i = 0;
|
||||
for (; i < CRYPTO_num_locks(); i++)
|
||||
pthread_mutex_init(&mm_tls_locks[i], NULL);
|
||||
CRYPTO_THREADID_set_callback(mm_tls_thread_id);
|
||||
CRYPTO_set_locking_callback(mm_tls_locking_callback);
|
||||
}
|
||||
|
||||
void mm_tls_free(void)
|
||||
{
|
||||
CRYPTO_set_locking_callback(NULL);
|
||||
int i = 0;
|
||||
for (; i < CRYPTO_num_locks(); i++)
|
||||
pthread_mutex_destroy(&mm_tls_locks[i]);
|
||||
OPENSSL_free(mm_tls_locks);
|
||||
#if 0
|
||||
SSL_COMP_free_compression_methods();
|
||||
#endif
|
||||
FIPS_mode_set(0);
|
||||
ENGINE_cleanup();
|
||||
CONF_modules_unload(1);
|
||||
EVP_cleanup();
|
||||
CRYPTO_cleanup_all_ex_data();
|
||||
ERR_remove_state(getpid());
|
||||
ERR_free_strings();
|
||||
}
|
||||
|
||||
void mm_tlsio_init(mm_tlsio_t *io, void *io_arg)
|
||||
{
|
||||
memset(io, 0, sizeof(*io));
|
||||
|
|
|
@ -21,12 +21,10 @@ struct mm_tlsio
|
|||
};
|
||||
|
||||
static inline int
|
||||
mm_tls_is_active(mm_tlsio_t *io) {
|
||||
mm_tlsio_is_active(mm_tlsio_t *io) {
|
||||
return io->ssl != NULL;
|
||||
}
|
||||
|
||||
void mm_tls_init(void);
|
||||
void mm_tls_free(void);
|
||||
void mm_tlsio_init(mm_tlsio_t*, void*);
|
||||
void mm_tlsio_free(mm_tlsio_t*);
|
||||
void mm_tlsio_error_reset(mm_tlsio_t*);
|
||||
|
|
|
@ -110,7 +110,7 @@ MACHINE_API int
|
|||
machine_write(machine_io_t *obj, char *buf, int size, uint32_t time_ms)
|
||||
{
|
||||
mm_io_t *io = mm_cast(mm_io_t*, obj);
|
||||
if (mm_tls_is_active(&io->tls))
|
||||
if (mm_tlsio_is_active(&io->tls))
|
||||
return mm_tlsio_write(&io->tls, buf, size, time_ms);
|
||||
return mm_write(io, buf, size, time_ms);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue