]>
Commit | Line | Data |
---|---|---|
50108304 | 1 | /* |
62867571 | 2 | * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. |
50108304 | 3 | * |
f3a95349 | 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
62867571 RS |
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 | |
50108304 MC |
8 | */ |
9 | ||
6e8ac508 | 10 | /* This must be the first #include file */ |
706457b7 | 11 | #include "../async_local.h" |
50108304 | 12 | |
636ca4ff | 13 | #ifdef ASYNC_POSIX |
6e8ac508 | 14 | |
50108304 | 15 | # include <stddef.h> |
f4da39d2 | 16 | # include <unistd.h> |
50108304 | 17 | |
06754949 MC |
18 | #define STACKSIZE 32768 |
19 | ||
667867cc | 20 | int ASYNC_is_capable(void) |
22a34c2f | 21 | { |
c521edc3 MC |
22 | 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 | return getcontext(&ctx) == 0; | |
22a34c2f MC |
29 | } |
30 | ||
667867cc MC |
31 | void async_local_cleanup(void) |
32 | { | |
33 | } | |
22a34c2f | 34 | |
6e8ac508 | 35 | int async_fibre_makecontext(async_fibre *fibre) |
50108304 | 36 | { |
7070e5ca | 37 | fibre->env_init = 0; |
6e8ac508 VD |
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); | |
44 | return 1; | |
45 | } | |
46 | } else { | |
47 | fibre->fibre.uc_stack.ss_sp = NULL; | |
48 | } | |
49 | return 0; | |
50108304 MC |
50 | } |
51 | ||
636ca4ff | 52 | void async_fibre_free(async_fibre *fibre) |
50108304 | 53 | { |
6e8ac508 VD |
54 | OPENSSL_free(fibre->fibre.uc_stack.ss_sp); |
55 | fibre->fibre.uc_stack.ss_sp = NULL; | |
50108304 | 56 | } |
f4da39d2 | 57 | |
50108304 | 58 | #endif |