X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fasync%2Fasync_locl.h;h=786cf0099c1951a5278ea8149ef060ed271cbb77;hb=0cd0a820abc6124cf8e176fa92d620a2abf9e419;hp=3cf97479edaaa9a4c0b3d3ffbd12223d8fcc6424;hpb=2b2c78d4f0a73498739cfc0879299d7325c35160;p=oweals%2Fopenssl.git diff --git a/crypto/async/async_locl.h b/crypto/async/async_locl.h index 3cf97479ed..786cf0099c 100644 --- a/crypto/async/async_locl.h +++ b/crypto/async/async_locl.h @@ -1,60 +1,26 @@ -/* crypto/async/async_locl.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/)" + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. * - * 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. - * ==================================================================== + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html */ -#include +/* + * Must do this before including any header files, because on MacOS/X + * includes which includes + */ +#if defined(__APPLE__) && defined(__MACH__) && !defined(_XOPEN_SOURCE) +# define _XOPEN_SOURCE /* Otherwise incomplete ucontext_t structure */ +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + +#include #include typedef struct async_ctx_st async_ctx; +typedef struct async_pool_st async_pool; #include "arch/async_win.h" #include "arch/async_posix.h" @@ -72,22 +38,36 @@ struct async_job_st { void *funcargs; int ret; int status; - int wake_set; - OSSL_ASYNC_FD wait_fd; - OSSL_ASYNC_FD wake_fd; + ASYNC_WAIT_CTX *waitctx; +}; + +struct fd_lookup_st { + const void *key; + OSSL_ASYNC_FD fd; + void *custom_data; + void (*cleanup)(ASYNC_WAIT_CTX *, const void *, OSSL_ASYNC_FD, void *); + int add; + int del; + struct fd_lookup_st *next; +}; + +struct async_wait_ctx_st { + struct fd_lookup_st *fds; + size_t numadd; + size_t numdel; }; -DECLARE_STACK_OF(ASYNC_JOB) +DEFINE_STACK_OF(ASYNC_JOB) +struct async_pool_st { + STACK_OF(ASYNC_JOB) *jobs; + size_t curr_size; + size_t max_size; +}; + +void async_local_cleanup(void); void async_start_func(void); -STACK_OF(ASYNC_JOB) *async_get_pool(void); -int async_set_pool(STACK_OF(ASYNC_JOB) *poolin, size_t curr_size, - size_t max_size); -void async_increment_pool_size(void); -void async_release_job_to_pool(ASYNC_JOB *job); -size_t async_pool_max_size(void); -void async_release_pool(void); -int async_pool_can_grow(void); -int async_pipe(OSSL_ASYNC_FD *pipefds); -int async_write1(OSSL_ASYNC_FD fd, const void *buf); -int async_read1(OSSL_ASYNC_FD fd, void *buf); +async_ctx *async_get_ctx(void); + +void async_wait_ctx_reset_counts(ASYNC_WAIT_CTX *ctx); +