Fix clang errors
[openssl.git] / crypto / async / arch / async_posix.c
index bb799e54f8f32bb30b0b1c9473f772c739309ee7..814930f7bb56425712719eff5834754847fde895 100644 (file)
 #include "../async_locl.h"
 #include <openssl/async.h>
 
-#ifdef ASYNC_SYSV
+#ifdef ASYNC_POSIX
 # include <stddef.h>
 # include <ucontext.h>
+# include <unistd.h>
 # include <openssl/crypto.h>
 # include <openssl/async.h>
 
-__thread ASYNC_CTX *sysvctx;
+__thread async_ctx *sysvctx;
 
 #define STACKSIZE       32768
 
-int ASYNC_FIBRE_init(ASYNC_FIBRE *fibre)
+extern __thread size_t posixpool_max_size;
+extern __thread size_t posixpool_curr_size;
+extern __thread STACK_OF(ASYNC_JOB) *posixpool;
+__thread size_t posixpool_max_size = 0;
+__thread size_t posixpool_curr_size = 0;
+__thread STACK_OF(ASYNC_JOB) *posixpool = NULL;
+
+int async_fibre_init(async_fibre *fibre)
 {
     void *stack = NULL;
 
@@ -80,9 +88,75 @@ int ASYNC_FIBRE_init(ASYNC_FIBRE *fibre)
     return 1;
 }
 
-void ASYNC_FIBRE_free(ASYNC_FIBRE *fibre)
+void async_fibre_free(async_fibre *fibre)
 {
     if (fibre->fibre.uc_stack.ss_sp)
         OPENSSL_free(fibre->fibre.uc_stack.ss_sp);
 }
+
+int async_pipe(int *pipefds)
+{
+    if (pipe(pipefds) == 0)
+        return 1;
+
+    return 0;
+}
+
+int async_write1(int fd, const void *buf)
+{
+    if (write(fd, buf, 1) > 0)
+        return 1;
+
+    return 0;
+}
+
+int async_read1(int fd, void *buf)
+{
+    if (read(fd, buf, 1) > 0)
+        return 1;
+
+    return 0;
+}
+
+STACK_OF(ASYNC_JOB) *async_get_pool(void)
+{
+    return posixpool;
+}
+
+int async_set_pool(STACK_OF(ASYNC_JOB) *poolin, size_t curr_size,
+                    size_t max_size)
+{
+    posixpool = poolin;
+    posixpool_curr_size = curr_size;
+    posixpool_max_size = max_size;
+    return 1;
+}
+
+void async_increment_pool_size(void)
+{
+    posixpool_curr_size++;
+}
+
+void async_release_job_to_pool(ASYNC_JOB *job)
+{
+    sk_ASYNC_JOB_push(posixpool, job);
+}
+
+size_t async_pool_max_size(void)
+{
+    return posixpool_max_size;
+}
+
+void async_release_pool(void)
+{
+    sk_ASYNC_JOB_free(posixpool);
+    posixpool = NULL;
+}
+
+int async_pool_can_grow(void)
+{
+    return (posixpool_max_size == 0)
+        || (posixpool_curr_size < posixpool_max_size);
+}
+
 #endif