summaryrefslogtreecommitdiffstats
path: root/engines
diff options
context:
space:
mode:
authorPing Yu <ping.yu@intel.com>2018-11-05 15:41:01 -0500
committerMatt Caswell <matt@openssl.org>2019-01-27 12:27:17 +0000
commit9f5a87fd665cb597fa1c1f4eef882d2d2f833e61 (patch)
tree3bad8287fe464c81267aa7cf43a41344fd6db414 /engines
parent61e033308b1c004bd808352fb1d786547dcdf62b (diff)
add an additional async notification communication method based on callback
Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Paul Yang <yang.yang@baishancloud.com> Signed-off-by: Ping Yu <ping.yu@intel.com> Signed-off-by: Steven Linsell <stevenx.linsell@intel.com> (Merged from https://github.com/openssl/openssl/pull/7573)
Diffstat (limited to 'engines')
-rw-r--r--engines/e_dasync.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/engines/e_dasync.c b/engines/e_dasync.c
index 2e124114f9..3d80610b67 100644
--- a/engines/e_dasync.c
+++ b/engines/e_dasync.c
@@ -403,6 +403,8 @@ static void wait_cleanup(ASYNC_WAIT_CTX *ctx, const void *key,
static void dummy_pause_job(void) {
ASYNC_JOB *job;
ASYNC_WAIT_CTX *waitctx;
+ ASYNC_callback_fn callback;
+ void * callback_arg;
OSSL_ASYNC_FD pipefds[2] = {0, 0};
OSSL_ASYNC_FD *writefd;
#if defined(ASYNC_WIN)
@@ -417,6 +419,18 @@ static void dummy_pause_job(void) {
waitctx = ASYNC_get_wait_ctx(job);
+ if (ASYNC_WAIT_CTX_get_callback(waitctx, &callback, &callback_arg) && callback != NULL) {
+ /*
+ * In the Dummy async engine we are cheating. We call the callback that the job
+ * is complete before the call to ASYNC_pause_job(). A real
+ * async engine would only call the callback when the job was actually complete
+ */
+ (*callback)(callback_arg);
+ ASYNC_pause_job();
+ return;
+ }
+
+
if (ASYNC_WAIT_CTX_get_fd(waitctx, engine_dasync_id, &pipefds[0],
(void **)&writefd)) {
pipefds[1] = *writefd;