From 9bf5328f97deeabc4496888dfc91dc9d68e14dde Mon Sep 17 00:00:00 2001 From: Andrey Churbanov Date: Thu, 29 Jan 2015 17:18:20 +0000 Subject: [PATCH] Pin the libiomp5.dll for the lifetime of application, Windows-specific llvm-svn: 227469 --- openmp/runtime/src/z_Windows_NT_util.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/openmp/runtime/src/z_Windows_NT_util.c b/openmp/runtime/src/z_Windows_NT_util.c index b581d46..62fd0e4 100644 --- a/openmp/runtime/src/z_Windows_NT_util.c +++ b/openmp/runtime/src/z_Windows_NT_util.c @@ -835,6 +835,21 @@ __kmp_runtime_initialize( void ) return; }; +#if GUIDEDLL_EXPORTS + /* Pin dynamic library for the lifetime of application */ + { + // First, turn off error message boxes + UINT err_mode = SetErrorMode (SEM_FAILCRITICALERRORS); + HMODULE h; + BOOL ret = GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS + |GET_MODULE_HANDLE_EX_FLAG_PIN, + (LPCTSTR)&__kmp_serial_initialize, &h); + KMP_DEBUG_ASSERT2(h && ret, "OpenMP RTL cannot find itself loaded"); + SetErrorMode (err_mode); // Restore error mode + KA_TRACE( 10, ("__kmp_runtime_initialize: dynamic library pinned\n") ); + } +#endif + InitializeCriticalSection( & __kmp_win32_section ); #if USE_ITT_BUILD __kmp_itt_system_object_created( & __kmp_win32_section, "Critical Section" ); -- 2.7.4