diff options
author | Matt Caswell <matt@openssl.org> | 2015-07-22 17:50:51 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2015-11-20 23:33:46 +0000 |
commit | 252d6d3aa62dccf0dc826644b7da0b6bafa3831b (patch) | |
tree | 529055a0ca2eb9f6564f18e4a87d25d1d458c371 /include | |
parent | 7070e5ca2fa41940d56599bf016a45cb1c0e03f0 (diff) |
Add ASYNC_JOB pools
It is expensive to create the ASYNC_JOB objects due to the "makecontext"
call. This change adds support for pools of ASYNC_JOB objects so that we
don't have to create a new ASYNC_JOB every time we want to use one.
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/openssl/async.h | 8 | ||||
-rw-r--r-- | include/openssl/safestack.h | 23 |
2 files changed, 29 insertions, 2 deletions
diff --git a/include/openssl/async.h b/include/openssl/async.h index ff5985748d..1cd799202f 100644 --- a/include/openssl/async.h +++ b/include/openssl/async.h @@ -63,8 +63,12 @@ extern "C" { typedef struct async_job_st ASYNC_JOB; #define ASYNC_ERR 0 -#define ASYNC_PAUSE 1 -#define ASYNC_FINISH 2 +#define ASYNC_NO_JOBS 1 +#define ASYNC_PAUSE 2 +#define ASYNC_FINISH 3 + +int ASYNC_init_pool(unsigned int local, size_t max_size, size_t init_size); +void ASYNC_free_pool(void); int ASYNC_start_job(ASYNC_JOB **job, int *ret, int (*func)(void *), void *args, size_t size); diff --git a/include/openssl/safestack.h b/include/openssl/safestack.h index 785bec6ff2..f2fa57c460 100644 --- a/include/openssl/safestack.h +++ b/include/openssl/safestack.h @@ -412,6 +412,29 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) # define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) # define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) +# define sk_ASYNC_JOB_new(cmp) SKM_sk_new(ASYNC_JOB, (cmp)) +# define sk_ASYNC_JOB_new_null() SKM_sk_new_null(ASYNC_JOB) +# define sk_ASYNC_JOB_free(st) SKM_sk_free(ASYNC_JOB, (st)) +# define sk_ASYNC_JOB_num(st) SKM_sk_num(ASYNC_JOB, (st)) +# define sk_ASYNC_JOB_value(st, i) SKM_sk_value(ASYNC_JOB, (st), (i)) +# define sk_ASYNC_JOB_set(st, i, val) SKM_sk_set(ASYNC_JOB, (st), (i), (val)) +# define sk_ASYNC_JOB_zero(st) SKM_sk_zero(ASYNC_JOB, (st)) +# define sk_ASYNC_JOB_push(st, val) SKM_sk_push(ASYNC_JOB, (st), (val)) +# define sk_ASYNC_JOB_unshift(st, val) SKM_sk_unshift(ASYNC_JOB, (st), (val)) +# define sk_ASYNC_JOB_find(st, val) SKM_sk_find(ASYNC_JOB, (st), (val)) +# define sk_ASYNC_JOB_find_ex(st, val) SKM_sk_find_ex(ASYNC_JOB, (st), (val)) +# define sk_ASYNC_JOB_delete(st, i) SKM_sk_delete(ASYNC_JOB, (st), (i)) +# define sk_ASYNC_JOB_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASYNC_JOB, (st), (ptr)) +# define sk_ASYNC_JOB_insert(st, val, i) SKM_sk_insert(ASYNC_JOB, (st), (val), (i)) +# define sk_ASYNC_JOB_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASYNC_JOB, (st), (cmp)) +# define sk_ASYNC_JOB_dup(st) SKM_sk_dup(ASYNC_JOB, st) +# define sk_ASYNC_JOB_pop_free(st, free_func) SKM_sk_pop_free(ASYNC_JOB, (st), (free_func)) +# define sk_ASYNC_JOB_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASYNC_JOB, (st), (copy_func), (free_func)) +# define sk_ASYNC_JOB_shift(st) SKM_sk_shift(ASYNC_JOB, (st)) +# define sk_ASYNC_JOB_pop(st) SKM_sk_pop(ASYNC_JOB, (st)) +# define sk_ASYNC_JOB_sort(st) SKM_sk_sort(ASYNC_JOB, (st)) +# define sk_ASYNC_JOB_is_sorted(st) SKM_sk_is_sorted(ASYNC_JOB, (st)) + # define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp)) # define sk_BIO_new_null() SKM_sk_new_null(BIO) # define sk_BIO_free(st) SKM_sk_free(BIO, (st)) |