Fix Windows 64 bit crashes
authorMatt Caswell <matt@openssl.org>
Thu, 19 May 2016 19:11:09 +0000 (20:11 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 20 May 2016 22:08:18 +0000 (23:08 +0100)
commitfcb318c64b8c3ff24ec36f99797880386bed5867
treebcf69b03f51b62f326be4bd316dba29195f41ac7
parent739a1eb1961cdc3b1597a040766f3cb359d095f6
Fix Windows 64 bit crashes

The function InitOnceExceuteOnce is the best way to support the
implementation of CRYPTO_THREAD_run_once() on Windows. Unfortunately
WinXP doesn't have it. To get around that we had two different
implementations: one for WinXP and one for later versions. Which one was
used was based on the value of _WIN32_WINNT.

This approach was starting to cause problems though because other parts of
OpenSSL assume _WIN32_WINNT is going to be 0x0501 and crashes were
occurring dependant on include file ordering. In addition a conditional
based on _WIN32_WINNT had made its way into a public header file through
commit 5c4328f. This is problematic because the value of this macro can
vary between OpenSSL build time and application build time.

The simplest solution to this mess is just to always use the WinXP version
of CRYPTO_THREAD_run_once(). Its perhaps slightly sub-optimal but probably
not noticably.

GitHub Issue #1086

Reviewed-by: Richard Levitte <levitte@openssl.org>
crypto/threads_win.c
include/openssl/crypto.h