From da4113af8888efe1f1c37be84639a6eaa03fad32 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 2 Aug 2021 16:32:32 +0500 Subject: [PATCH] [K/N][runtime] Lazy initialization fix for wasm --- kotlin-native/runtime/src/main/cpp/Runtime.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kotlin-native/runtime/src/main/cpp/Runtime.cpp b/kotlin-native/runtime/src/main/cpp/Runtime.cpp index a22fd331125..1f6833450bd 100644 --- a/kotlin-native/runtime/src/main/cpp/Runtime.cpp +++ b/kotlin-native/runtime/src/main/cpp/Runtime.cpp @@ -436,12 +436,16 @@ void CallInitGlobalPossiblyLock(int volatile* state, void (*init)(bool)) { } if (compareAndSwap(state, FILE_NOT_INITIALIZED, FILE_BEING_INITIALIZED | (threadId << 2)) == FILE_NOT_INITIALIZED) { // actual initialization +#if KONAN_NO_EXCEPTIONS + init(threadId == mainThreadId); +#else try { init(threadId == mainThreadId); } catch (...) { *state = FILE_FAILED_TO_INITIALIZE; throw; } +#endif *state = FILE_INITIALIZED; } else { do { @@ -456,12 +460,16 @@ void CallInitThreadLocal(int volatile* globalState, int* localState, void (*init if (*localState == FILE_FAILED_TO_INITIALIZE || (globalState != nullptr && *globalState == FILE_FAILED_TO_INITIALIZE)) ThrowFileFailedToInitializeException(); *localState = FILE_INITIALIZED; +#if KONAN_NO_EXCEPTIONS + init(konan::currentThreadId() == mainThreadId); +#else try { init(konan::currentThreadId() == mainThreadId); } catch(...) { *localState = FILE_FAILED_TO_INITIALIZE; throw; } +#endif } } // extern "C"