Skip to content

Commit 3fbb524

Browse files
committed
Update main.cpp
1 parent c26bb68 commit 3fbb524

1 file changed

Lines changed: 36 additions & 5 deletions

File tree

main.cpp

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,27 @@ jobject GetCurrentContext()
283283
return g_GlobalContext;
284284
}
285285

286-
void* AML_dlopen(const char* lib)
286+
struct LibraryLoadData
287+
{
288+
LibraryLoadData() : initMembersList(NULL), initMembersCount(0) { }
289+
typedef void(*initArrayMember)();
290+
291+
initArrayMember* initMembersList;
292+
int initMembersCount;
293+
};
294+
static LibraryLoadData g_LoadDatas[2];
295+
void AML_PostLoadLib(int libNum)
296+
{
297+
libNum--;
298+
299+
const int size = g_LoadDatas[libNum].initMembersCount;
300+
for(int i = 0; i < size; ++i)
301+
{
302+
g_LoadDatas[libNum].initMembersList[i]();
303+
}
304+
}
305+
306+
void* AML_dlopen(const char* lib, int libNum)
287307
{
288308
return dlopen(lib, RTLD_NOW);
289309
}
@@ -314,6 +334,17 @@ void StartAMLRightNow(const char* libName1 = NULL, const char* libName2 = NULL)
314334
return;
315335
}
316336

337+
// Preload libs
338+
void *lib1 = NULL, *lib2 = NULL;
339+
if(libName1 && libName1[0])
340+
{
341+
lib1 = AML_dlopen(libName1, 1);
342+
}
343+
if(libName2 && libName2[0])
344+
{
345+
lib2 = AML_dlopen(libName2, 2);
346+
}
347+
317348
/* Must Have for mods */
318349
modlist->AddMod(amlmodinfo, 0, "localpath (core)");
319350
interfaces->Register("AMLInterface", aml);
@@ -541,15 +572,15 @@ void StartAMLRightNow(const char* libName1 = NULL, const char* libName2 = NULL)
541572
//if(g_bCrashAML) __builtin_trap(); // Dont let really weird guys to use this...
542573

543574
// TODO: should be loaded in a different thread..?
544-
if(libName1 && libName1[0])
575+
if(lib1)
545576
{
546-
void* lib1 = AML_dlopen(libName1);
577+
AML_PostLoadLib(1);
547578
auto libEntry = (void(*)(JavaVM*, void*))dlsym(lib1, "JNI_OnLoad");
548579
if(libEntry) libEntry(g_pJavaVM, g_pJavaReserved);
549580
}
550-
if(libName2 && libName2[0])
581+
if(lib2)
551582
{
552-
void* lib2 = AML_dlopen(libName2);
583+
AML_PostLoadLib(2);
553584
auto libEntry = (void(*)(JavaVM*, void*))dlsym(lib2, "JNI_OnLoad");
554585
if(libEntry) libEntry(g_pJavaVM, g_pJavaReserved);
555586
}

0 commit comments

Comments
 (0)