1 | /* |
2 | * Copyright 2015-2016 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_WIN |
14 | |
15 | # include <windows.h> |
16 | # include "internal/cryptlib.h" |
17 | |
18 | int ASYNC_is_capable(void) |
19 | { |
20 | return 1; |
21 | } |
22 | |
23 | void async_local_cleanup(void) |
24 | { |
25 | async_ctx *ctx = async_get_ctx(); |
26 | if (ctx != NULL) { |
27 | async_fibre *fibre = &ctx->dispatcher; |
28 | if (fibre != NULL && fibre->fibre != NULL && fibre->converted) { |
29 | ConvertFiberToThread(); |
30 | fibre->fibre = NULL; |
31 | } |
32 | } |
33 | } |
34 | |
35 | int async_fibre_init_dispatcher(async_fibre *fibre) |
36 | { |
37 | fibre->fibre = ConvertThreadToFiber(NULL); |
38 | if (fibre->fibre == NULL) { |
39 | fibre->converted = 0; |
40 | fibre->fibre = GetCurrentFiber(); |
41 | if (fibre->fibre == NULL) |
42 | return 0; |
43 | } else { |
44 | fibre->converted = 1; |
45 | } |
46 | |
47 | return 1; |
48 | } |
49 | |
50 | VOID CALLBACK async_start_func_win(PVOID unused) |
51 | { |
52 | async_start_func(); |
53 | } |
54 | |
55 | #endif |
56 | |