[K/N][runtime] Lazy initialization fix for wasm
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user