Add null async implementation
authorMatt Caswell <matt@openssl.org>
Tue, 17 Feb 2015 14:14:36 +0000 (14:14 +0000)
committerMatt Caswell <matt@openssl.org>
Fri, 20 Nov 2015 23:32:18 +0000 (23:32 +0000)
Create a "null" async implementation for platforms that lack support. This
just does nothing when called and therefore performs synchronously.

Reviewed-by: Rich Salz <rsalz@openssl.org>
crypto/async/Makefile
crypto/async/arch/async_null.h [new file with mode: 0644]
crypto/async/async.c
crypto/async/async_locl.h

index 25b4f9316a9809abcdbf3ffaab5aaeb0500876ec..ec6f2b5feb09f3c787c582437ad7a7e645beb92a 100644 (file)
@@ -85,14 +85,14 @@ arch/async_posix.o: ../../include/openssl/opensslv.h
 arch/async_posix.o: ../../include/openssl/ossl_typ.h
 arch/async_posix.o: ../../include/openssl/safestack.h
 arch/async_posix.o: ../../include/openssl/stack.h
-arch/async_posix.o: ../../include/openssl/symhacks.h arch/../arch/async_posix.h
-arch/async_posix.o: arch/../arch/async_win.h arch/../async_locl.h
-arch/async_posix.o: arch/async_posix.c
+arch/async_posix.o: ../../include/openssl/symhacks.h arch/../arch/async_null.h
+arch/async_posix.o: arch/../arch/async_posix.h arch/../arch/async_win.h
+arch/async_posix.o: arch/../async_locl.h arch/async_posix.c
 arch/async_win.o: ../../include/openssl/async.h arch/async_win.c
 arch/async_win.o: arch/async_win.h
 async.o: ../../include/openssl/async.h ../../include/openssl/crypto.h
 async.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 async.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 async.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
-async.o: ../../include/openssl/symhacks.h arch/async_posix.h arch/async_win.h
-async.o: async.c async_locl.h
+async.o: ../../include/openssl/symhacks.h arch/async_null.h arch/async_posix.h
+async.o: arch/async_win.h async.c async_locl.h
diff --git a/crypto/async/arch/async_null.h b/crypto/async/arch/async_null.h
new file mode 100644 (file)
index 0000000..7d1c601
--- /dev/null
@@ -0,0 +1,76 @@
+/* crypto/async/arch/async_null.h */
+/*
+ * Written by Matt Caswell (matt@openssl.org) for the OpenSSL project.
+ */
+/* ====================================================================
+ * Copyright (c) 2015 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#include <openssl/async.h>
+
+/*
+ * If we haven't managed to detect any other async architecture then we default
+ * to NULL.
+ */
+#ifndef ASYNC_ARCH
+# define ASYNC_NULL
+# define ASYNC_ARCH
+
+typedef struct async_fibre_st {
+    int dummy;
+} ASYNC_FIBRE;
+
+
+
+# define ASYNC_set_ctx(nctx)                    0
+# define ASYNC_get_ctx()                        ((ASYNC_CTX *)NULL)
+# define ASYNC_FIBRE_swapcontext(o,n,r)         0
+# define ASYNC_FIBRE_makecontext(c)
+# define ASYNC_FIBRE_free(f)
+# define ASYNC_FIBRE_init_dispatcher(f)
+#endif
index 9b044d3d1e31ead46f7d57817699c98ce1441022..cef5f4f9599e94da8dea83d223892ef7d4f2b9b2 100644 (file)
@@ -73,7 +73,8 @@ static ASYNC_CTX *ASYNC_CTX_new(void)
 
     ASYNC_FIBRE_init_dispatcher(&nctx->dispatcher);
     nctx->currjob = NULL;
-    ASYNC_set_ctx(nctx);
+    if(!ASYNC_set_ctx(nctx))
+        goto err;
 
     return nctx;
 err:
@@ -90,7 +91,8 @@ static int ASYNC_CTX_free(void)
         OPENSSL_free(ASYNC_get_ctx());
     }
 
-    ASYNC_set_ctx(NULL);
+    if(!ASYNC_set_ctx(NULL))
+        return 0;
 
     return 1;
 }
index fefe62a8fc4d7b7271ffa02058b11e607de8498a..4a6cb3e2c59fe23df84b943af2e13c1e328a787e 100644 (file)
@@ -57,10 +57,7 @@ typedef struct async_ctx_st ASYNC_CTX;
 
 #include "arch/async_win.h"
 #include "arch/async_posix.h"
-
-#ifndef ASYNC_ARCH
-# error Failed to detect async arch
-#endif
+#include "arch/async_null.h"
 
 struct async_ctx_st {
     ASYNC_FIBRE dispatcher;