diff options
author | Matt Caswell <matt@openssl.org> | 2016-03-02 16:15:52 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-03-02 17:23:42 +0000 |
commit | 224905f8aaeac7fd81a49dc160a843c5fff60e6e (patch) | |
tree | 8242952f73c72a9f234beaf3f69ce1159a542f41 /crypto/async/arch | |
parent | 0c452abc162d348876e136979230a06d0d83641b (diff) |
Convert ASYNC code to use new Thread API
The async code uses thread local variables. We should convert to using
the new Thread API for doing this.
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto/async/arch')
-rw-r--r-- | crypto/async/arch/async_null.c | 9 | ||||
-rw-r--r-- | crypto/async/arch/async_null.h | 4 | ||||
-rw-r--r-- | crypto/async/arch/async_posix.c | 15 | ||||
-rw-r--r-- | crypto/async/arch/async_posix.h | 8 | ||||
-rw-r--r-- | crypto/async/arch/async_win.c | 60 | ||||
-rw-r--r-- | crypto/async/arch/async_win.h | 6 |
6 files changed, 1 insertions, 101 deletions
diff --git a/crypto/async/arch/async_null.c b/crypto/async/arch/async_null.c index 03f8ebfa10..7b93090a9a 100644 --- a/crypto/async/arch/async_null.c +++ b/crypto/async/arch/async_null.c @@ -55,18 +55,9 @@ #ifdef ASYNC_NULL -int async_global_init(void) -{ - return 0; -} - void async_local_cleanup(void) { } -void async_global_cleanup(void) -{ -} - #endif diff --git a/crypto/async/arch/async_null.h b/crypto/async/arch/async_null.h index 4cd0a8b966..a965bdbbd8 100644 --- a/crypto/async/arch/async_null.h +++ b/crypto/async/arch/async_null.h @@ -65,13 +65,9 @@ typedef struct async_fibre_st { } async_fibre; -# define async_set_ctx(nctx) 0 -# define async_arch_get_ctx() ((async_ctx *)NULL) # define async_fibre_swapcontext(o,n,r) 0 # define async_fibre_makecontext(c) 0 # define async_fibre_free(f) # define async_fibre_init_dispatcher(f) -# define async_get_pool() NULL -# define async_set_pool(p) 0 #endif diff --git a/crypto/async/arch/async_posix.c b/crypto/async/arch/async_posix.c index 626471d370..553ec664e2 100644 --- a/crypto/async/arch/async_posix.c +++ b/crypto/async/arch/async_posix.c @@ -58,27 +58,12 @@ # include <stddef.h> # include <unistd.h> -pthread_key_t posixctx; -pthread_key_t posixpool; - #define STACKSIZE 32768 -int async_global_init(void) -{ - if (pthread_key_create(&posixctx, NULL) != 0 - || pthread_key_create(&posixpool, NULL) != 0) - return 0; - - return 1; -} - void async_local_cleanup(void) { } -void async_global_cleanup(void) -{ -} int async_fibre_makecontext(async_fibre *fibre) { diff --git a/crypto/async/arch/async_posix.h b/crypto/async/arch/async_posix.h index 7f1bdd1cc5..de80f95f9d 100644 --- a/crypto/async/arch/async_posix.h +++ b/crypto/async/arch/async_posix.h @@ -68,20 +68,12 @@ # include <setjmp.h> # include "e_os.h" -extern pthread_key_t posixctx; -extern pthread_key_t posixpool; - typedef struct async_fibre_st { ucontext_t fibre; jmp_buf env; int env_init; } async_fibre; -# define async_set_ctx(nctx) (pthread_setspecific(posixctx , (nctx)) == 0) -# define async_arch_get_ctx() ((async_ctx *)pthread_getspecific(posixctx)) -# define async_set_pool(p) (pthread_setspecific(posixpool , (p)) == 0) -# define async_get_pool() ((async_pool *)pthread_getspecific(posixpool)) - static inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, int r) { o->env_init = 1; diff --git a/crypto/async/arch/async_win.c b/crypto/async/arch/async_win.c index c0776b1239..6b948c3d9c 100644 --- a/crypto/async/arch/async_win.c +++ b/crypto/async/arch/async_win.c @@ -58,38 +58,9 @@ # include <windows.h> # include "internal/cryptlib.h" -struct winpool { - STACK_OF(ASYNC_JOB) *pool; - size_t curr_size; - size_t max_size; -}; - -static DWORD asyncwinpool = 0; -static DWORD asyncwinctx = 0; - - -void async_start_func(void); - -int async_global_init(void) -{ - asyncwinpool = TlsAlloc(); - asyncwinctx = TlsAlloc(); - if (asyncwinpool == TLS_OUT_OF_INDEXES - || asyncwinctx == TLS_OUT_OF_INDEXES) { - if (asyncwinpool != TLS_OUT_OF_INDEXES) { - TlsFree(asyncwinpool); - } - if (asyncwinctx != TLS_OUT_OF_INDEXES) { - TlsFree(asyncwinctx); - } - return 0; - } - return 1; -} - void async_local_cleanup(void) { - async_ctx *ctx = async_arch_get_ctx(); + async_ctx *ctx = async_get_ctx(); if (ctx != NULL) { async_fibre *fibre = &ctx->dispatcher; if(fibre != NULL && fibre->fibre != NULL && fibre->converted) { @@ -99,14 +70,6 @@ void async_local_cleanup(void) } } -void async_global_cleanup(void) -{ - TlsFree(asyncwinpool); - TlsFree(asyncwinctx); - asyncwinpool = 0; - asyncwinctx = 0; -} - int async_fibre_init_dispatcher(async_fibre *fibre) { fibre->fibre = ConvertThreadToFiber(NULL); @@ -127,25 +90,4 @@ VOID CALLBACK async_start_func_win(PVOID unused) async_start_func(); } -async_pool *async_get_pool(void) -{ - return (async_pool *)TlsGetValue(asyncwinpool); -} - - -int async_set_pool(async_pool *pool) -{ - return TlsSetValue(asyncwinpool, (LPVOID)pool) != 0; -} - -async_ctx *async_arch_get_ctx(void) -{ - return (async_ctx *)TlsGetValue(asyncwinctx); -} - -int async_set_ctx(async_ctx *ctx) -{ - return TlsSetValue(asyncwinctx, (LPVOID)ctx) != 0; -} - #endif diff --git a/crypto/async/arch/async_win.h b/crypto/async/arch/async_win.h index 87e30a4f6e..42873307d0 100644 --- a/crypto/async/arch/async_win.h +++ b/crypto/async/arch/async_win.h @@ -73,13 +73,7 @@ typedef struct async_fibre_st { ((c)->fibre = CreateFiber(0, async_start_func_win, 0)) # define async_fibre_free(f) (DeleteFiber((f)->fibre)) -async_ctx *async_arch_get_ctx(void); -int async_set_ctx(async_ctx *ctx); - int async_fibre_init_dispatcher(async_fibre *fibre); VOID CALLBACK async_start_func_win(PVOID unused); -async_pool *async_get_pool(void); -int async_set_pool(async_pool *pool); - #endif |