Coverage Report

Created: 2025-06-13 06:58

/src/openssl30/crypto/async/arch/async_posix.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (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_local.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
24
    /*
25
     * Some platforms provide getcontext() but it does not work (notably
26
     * MacOSX PPC64). Check for a working getcontext();
27
     */
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
#ifndef USE_SWAPCONTEXT
38
0
    fibre->env_init = 0;
39
0
#endif
40
0
    if (getcontext(&fibre->fibre) == 0) {
41
0
        fibre->fibre.uc_stack.ss_sp = OPENSSL_malloc(STACKSIZE);
42
0
        if (fibre->fibre.uc_stack.ss_sp != NULL) {
43
0
            fibre->fibre.uc_stack.ss_size = STACKSIZE;
44
0
            fibre->fibre.uc_link = NULL;
45
0
            makecontext(&fibre->fibre, async_start_func, 0);
46
0
            return 1;
47
0
        }
48
0
    } else {
49
0
        fibre->fibre.uc_stack.ss_sp = NULL;
50
0
    }
51
0
    return 0;
52
0
}
53
54
void async_fibre_free(async_fibre *fibre)
55
0
{
56
0
    OPENSSL_free(fibre->fibre.uc_stack.ss_sp);
57
0
    fibre->fibre.uc_stack.ss_sp = NULL;
58
0
}
59
60
#endif