848f432b0f751cb10e6e7045558c529ba771ab10
[openssl.git] / crypto / async / arch / async_win.c
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_locl.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