Coverage Report

Created: 2018-08-29 13:53

/src/openssl/crypto/async/arch/async_posix.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2015-2016 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
/* This must be the first #include file */
11
#include "../async_locl.h"
12
13
#ifdef ASYNC_POSIX
14
15
# include <stddef.h>
16
# include <unistd.h>
17
18
0
#define STACKSIZE       32768
19
20
int ASYNC_is_capable(void)
21
0
{
22
0
    ucontext_t ctx;
23
0
24
0
    /*
25
0
     * Some platforms provide getcontext() but it does not work (notably
26
0
     * MacOSX PPC64). Check for a working getcontext();
27
0
     */
28
0
    return getcontext(&ctx) == 0;
29
0
}
30
31
void async_local_cleanup(void)
32
0
{
33
0
}
34
35
int async_fibre_makecontext(async_fibre *fibre)
36
0
{
37
0
    fibre->env_init = 0;
38
0
    if (getcontext(&fibre->fibre) == 0) {
39
0
        fibre->fibre.uc_stack.ss_sp = OPENSSL_malloc(STACKSIZE);
40
0
        if (fibre->fibre.uc_stack.ss_sp != NULL) {
41
0
            fibre->fibre.uc_stack.ss_size = STACKSIZE;
42
0
            fibre->fibre.uc_link = NULL;
43
0
            makecontext(&fibre->fibre, async_start_func, 0);
44
0
            return 1;
45
0
        }
46
0
    } else {
47
0
        fibre->fibre.uc_stack.ss_sp = NULL;
48
0
    }
49
0
    return 0;
50
0
}
51
52
void async_fibre_free(async_fibre *fibre)
53
0
{
54
0
    OPENSSL_free(fibre->fibre.uc_stack.ss_sp);
55
0
    fibre->fibre.uc_stack.ss_sp = NULL;
56
0
}
57
58
#endif