]>
git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/async/arch/async_posix.c
2 * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
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
10 /* This must be the first #include file */
11 #include "../async_locl.h"
18 #define STACKSIZE 32768
20 int ASYNC_is_capable(void)
25 * Some platforms provide getcontext() but it does not work (notably
26 * MacOSX PPC64). Check for a working getcontext();
28 return getcontext(&ctx
) == 0;
31 void async_local_cleanup(void)
35 int async_fibre_makecontext(async_fibre
*fibre
)
38 if (getcontext(&fibre
->fibre
) == 0) {
39 fibre
->fibre
.uc_stack
.ss_sp
= OPENSSL_malloc(STACKSIZE
);
40 if (fibre
->fibre
.uc_stack
.ss_sp
!= NULL
) {
41 fibre
->fibre
.uc_stack
.ss_size
= STACKSIZE
;
42 fibre
->fibre
.uc_link
= NULL
;
43 makecontext(&fibre
->fibre
, async_start_func
, 0);
47 fibre
->fibre
.uc_stack
.ss_sp
= NULL
;
52 void async_fibre_free(async_fibre
*fibre
)
54 OPENSSL_free(fibre
->fibre
.uc_stack
.ss_sp
);
55 fibre
->fibre
.uc_stack
.ss_sp
= NULL
;