Coverage Report

Created: 2018-08-29 13:53

/src/openssl/crypto/async/arch/async_posix.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the OpenSSL license (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
#ifndef OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H
11
#define OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H
12
#include <openssl/e_os2.h>
13
14
#if defined(OPENSSL_SYS_UNIX) \
15
    && defined(OPENSSL_THREADS) && !defined(OPENSSL_NO_ASYNC) \
16
    && !defined(__ANDROID__) && !defined(__OpenBSD__)
17
18
# include <unistd.h>
19
20
# if _POSIX_VERSION >= 200112L
21
22
# include <pthread.h>
23
24
#  define ASYNC_POSIX
25
#  define ASYNC_ARCH
26
27
#  include <ucontext.h>
28
#  include <setjmp.h>
29
30
typedef struct async_fibre_st {
31
    ucontext_t fibre;
32
    jmp_buf env;
33
    int env_init;
34
} async_fibre;
35
36
static ossl_inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, int r)
37
0
{
38
0
    o->env_init = 1;
39
0
40
0
    if (!r || !_setjmp(o->env)) {
41
0
        if (n->env_init)
42
0
            _longjmp(n->env, 1);
43
0
        else
44
0
            setcontext(&n->fibre);
45
0
    }
46
0
47
0
    return 1;
48
0
}
Unexecuted instantiation: async.c:async_fibre_swapcontext
Unexecuted instantiation: async_wait.c:async_fibre_swapcontext
Unexecuted instantiation: async_posix.c:async_fibre_swapcontext
49
50
#  define async_fibre_init_dispatcher(d)
51
52
int async_fibre_makecontext(async_fibre *fibre);
53
void async_fibre_free(async_fibre *fibre);
54
55
# endif
56
#endif
57
#endif /* OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H */