1 /* 2 * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the OpenSSL license (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 ASYNC_is_capable(void)18int ASYNC_is_capable(void) 19 { 20 return 1; 21 } 22 async_local_cleanup(void)23void 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 async_fibre_init_dispatcher(async_fibre * fibre)35int 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 async_start_func_win(PVOID unused)50VOID CALLBACK async_start_func_win(PVOID unused) 51 { 52 async_start_func(); 53 } 54 55 #endif 56