summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-07-22 17:50:51 +0100
committerMatt Caswell <matt@openssl.org>2015-11-20 23:33:46 +0000
commit252d6d3aa62dccf0dc826644b7da0b6bafa3831b (patch)
tree529055a0ca2eb9f6564f18e4a87d25d1d458c371 /include
parent7070e5ca2fa41940d56599bf016a45cb1c0e03f0 (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.h8
-rw-r--r--include/openssl/safestack.h23
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))