summaryrefslogtreecommitdiffstats
path: root/crypto/async/arch
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2016-03-02 16:15:52 +0000
committerMatt Caswell <matt@openssl.org>2016-03-02 17:23:42 +0000
commit224905f8aaeac7fd81a49dc160a843c5fff60e6e (patch)
tree8242952f73c72a9f234beaf3f69ce1159a542f41 /crypto/async/arch
parent0c452abc162d348876e136979230a06d0d83641b (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.c9
-rw-r--r--crypto/async/arch/async_null.h4
-rw-r--r--crypto/async/arch/async_posix.c15
-rw-r--r--crypto/async/arch/async_posix.h8
-rw-r--r--crypto/async/arch/async_win.c60
-rw-r--r--crypto/async/arch/async_win.h6
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