Hopefully fix so loading crashes
Summary: Changelog: [Android][Internal] Fix potential initializer interruption threading crashes. Reviewed By: mdvacca Differential Revision: D20615755 fbshipit-source-id: 58b706deeb6df1998caff5bf2ae9ec60114313fe
This commit is contained in:
Родитель
d241de9cb4
Коммит
33f20242f6
|
@ -17,13 +17,20 @@ import com.facebook.soloader.SoLoader;
|
||||||
* pass it from CatalystInstance, through Java, to TurboModuleManager::initHybrid.
|
* pass it from CatalystInstance, through Java, to TurboModuleManager::initHybrid.
|
||||||
*/
|
*/
|
||||||
public class CallInvokerHolderImpl implements CallInvokerHolder {
|
public class CallInvokerHolderImpl implements CallInvokerHolder {
|
||||||
static {
|
private static volatile boolean sIsSoLibraryLoaded;
|
||||||
SoLoader.loadLibrary("turbomodulejsijni");
|
|
||||||
}
|
|
||||||
|
|
||||||
private final HybridData mHybridData;
|
private final HybridData mHybridData;
|
||||||
|
|
||||||
private CallInvokerHolderImpl(HybridData hd) {
|
private CallInvokerHolderImpl(HybridData hd) {
|
||||||
|
maybeLoadSoLibrary();
|
||||||
mHybridData = hd;
|
mHybridData = hd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevents issues with initializer interruptions. See T38996825 and D13793825 for more context.
|
||||||
|
private static synchronized void maybeLoadSoLibrary() {
|
||||||
|
if (!sIsSoLibraryLoaded) {
|
||||||
|
SoLoader.loadLibrary("turbomodulejsijni");
|
||||||
|
sIsSoLibraryLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,11 +26,9 @@ import java.util.*;
|
||||||
* a Java module, that the C++ counterpart calls.
|
* a Java module, that the C++ counterpart calls.
|
||||||
*/
|
*/
|
||||||
public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||||
static {
|
|
||||||
SoLoader.loadLibrary("turbomodulejsijni");
|
|
||||||
}
|
|
||||||
|
|
||||||
private final TurboModuleManagerDelegate mTurbomoduleManagerDelegate;
|
private final TurboModuleManagerDelegate mTurbomoduleManagerDelegate;
|
||||||
|
private static volatile boolean sIsSoLibraryLoaded;
|
||||||
|
|
||||||
private final Map<String, TurboModule> mTurboModules = new HashMap<>();
|
private final Map<String, TurboModule> mTurboModules = new HashMap<>();
|
||||||
|
|
||||||
|
@ -43,6 +41,7 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||||
TurboModuleManagerDelegate tmmDelegate,
|
TurboModuleManagerDelegate tmmDelegate,
|
||||||
CallInvokerHolder jsCallInvokerHolder,
|
CallInvokerHolder jsCallInvokerHolder,
|
||||||
CallInvokerHolder nativeCallInvokerHolder) {
|
CallInvokerHolder nativeCallInvokerHolder) {
|
||||||
|
maybeLoadSoLibrary();
|
||||||
mHybridData =
|
mHybridData =
|
||||||
initHybrid(
|
initHybrid(
|
||||||
jsContext.get(),
|
jsContext.get(),
|
||||||
|
@ -137,4 +136,12 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||||
// Delete the native part of this hybrid class.
|
// Delete the native part of this hybrid class.
|
||||||
mHybridData.resetNative();
|
mHybridData.resetNative();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevents issues with initializer interruptions. See T38996825 and D13793825 for more context.
|
||||||
|
private static synchronized void maybeLoadSoLibrary() {
|
||||||
|
if (!sIsSoLibraryLoaded) {
|
||||||
|
SoLoader.loadLibrary("turbomodulejsijni");
|
||||||
|
sIsSoLibraryLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,15 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class TurboModuleManagerDelegate {
|
public abstract class TurboModuleManagerDelegate {
|
||||||
static {
|
|
||||||
SoLoader.loadLibrary("turbomodulejsijni");
|
|
||||||
}
|
|
||||||
|
|
||||||
private final HybridData mHybridData;
|
private final HybridData mHybridData;
|
||||||
|
|
||||||
|
private static volatile boolean sIsSoLibraryLoaded;
|
||||||
|
|
||||||
protected abstract HybridData initHybrid();
|
protected abstract HybridData initHybrid();
|
||||||
|
|
||||||
protected TurboModuleManagerDelegate() {
|
protected TurboModuleManagerDelegate() {
|
||||||
|
maybeLoadOtherSoLibraries();
|
||||||
|
maybeLoadSoLibrary();
|
||||||
mHybridData = initHybrid();
|
mHybridData = initHybrid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,4 +45,14 @@ public abstract class TurboModuleManagerDelegate {
|
||||||
public List<String> getEagerInitModuleNames() {
|
public List<String> getEagerInitModuleNames() {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevents issues with initializer interruptions. See T38996825 and D13793825 for more context.
|
||||||
|
private static synchronized void maybeLoadSoLibrary() {
|
||||||
|
if (!sIsSoLibraryLoaded) {
|
||||||
|
SoLoader.loadLibrary("turbomodulejsijni");
|
||||||
|
sIsSoLibraryLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected synchronized void maybeLoadOtherSoLibraries() {}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче