diff --git a/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java b/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java --- a/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java +++ b/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java @@ -26,6 +26,13 @@ CommSecureStore.getInstance().initialize(secureStoreModuleSupplier); CommHybrid.initHybrid(reactApplicationContext); + // We issue a useless set on CommSecureStore here to force it to initialize + // prior to scheduling initializeDatabaseManager on the DB thread below. + // This avoids a race condition where the DB thread and main thread both + // attempt to initialize CommSecureStore at the same time, which can cause + // a crash loop as described in ENG-7696 and ENG-8069. + CommSecureStore.set("comm.secure_store_initialization_complete", "1"); + File sqliteFile = reactApplicationContext.getDatabasePath("comm.sqlite"); GlobalDBSingleton.scheduleOrRun(() -> { DatabaseInitializer.initializeDatabaseManager(sqliteFile.getPath());