[K/N][runtime] Lazy initialization fix for wasm

This commit is contained in:
Igor Chevdar
2021-08-02 16:32:32 +05:00
parent ed07e1c778
commit da4113af88
@@ -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) { if (compareAndSwap(state, FILE_NOT_INITIALIZED, FILE_BEING_INITIALIZED | (threadId << 2)) == FILE_NOT_INITIALIZED) {
// actual initialization // actual initialization
#if KONAN_NO_EXCEPTIONS
init(threadId == mainThreadId);
#else
try { try {
init(threadId == mainThreadId); init(threadId == mainThreadId);
} catch (...) { } catch (...) {
*state = FILE_FAILED_TO_INITIALIZE; *state = FILE_FAILED_TO_INITIALIZE;
throw; throw;
} }
#endif
*state = FILE_INITIALIZED; *state = FILE_INITIALIZED;
} else { } else {
do { 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)) if (*localState == FILE_FAILED_TO_INITIALIZE || (globalState != nullptr && *globalState == FILE_FAILED_TO_INITIALIZE))
ThrowFileFailedToInitializeException(); ThrowFileFailedToInitializeException();
*localState = FILE_INITIALIZED; *localState = FILE_INITIALIZED;
#if KONAN_NO_EXCEPTIONS
init(konan::currentThreadId() == mainThreadId);
#else
try { try {
init(konan::currentThreadId() == mainThreadId); init(konan::currentThreadId() == mainThreadId);
} catch(...) { } catch(...) {
*localState = FILE_FAILED_TO_INITIALIZE; *localState = FILE_FAILED_TO_INITIALIZE;
throw; throw;
} }
#endif
} }
} // extern "C" } // extern "C"