Mob Grinding Utils

Mob Grinding Utils

80M Downloads

Potential crash due to parallel mod loading

embeddedt opened this issue ยท 0 comments

commented

At the end of your FMLClientSetupEvent you call ModColourManager.registerColourHandlers. That function then registers color handlers to the BlockColors and ItemColors classes. The problem is that FMLClientSetupEvent is called in parallel for multiple mods, while BlockColors and ItemColors are not thread-safe. This can very rarely lead to a crash when the data structures in these classes are corrupted by the concurrent access. To avoid this you should wrap the call using the enqueueWork method provided on the event.

I ran into this on 1.16 but it probably affects most post-1.13 versions.

[18:44:05] [Worker-Main-2/ERROR] [ne.mi.fm.ja.FMLModContainer/LOADING]: Caught exception during event FMLClientSetupEvent dispatch for modid mob_grinding_utils
java.lang.ArrayIndexOutOfBoundsException: Index 2048 out of bounds for length 1025
	at it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap.rehash(Reference2ReferenceOpenHashMap.java:908) ~[fastutil-8.2.1.jar:?] {re:classloading}
	at it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap.insert(Reference2ReferenceOpenHashMap.java:273) ~[fastutil-8.2.1.jar:?] {re:classloading}
	at it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap.put(Reference2ReferenceOpenHashMap.java:281) ~[fastutil-8.2.1.jar:?] {re:classloading}
	at net.minecraft.client.renderer.color.BlockColors.handler$zba000$preRegisterColor(BlockColors.java:531) ~[?:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:rubidium.mixins.json:core.model.MixinBlockColors,pl:mixin:A,pl:runtimedistcleaner:A}
	at net.minecraft.client.renderer.color.BlockColors.func_186722_a(BlockColors.java) ~[?:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:rubidium.mixins.json:core.model.MixinBlockColors,pl:mixin:A,pl:runtimedistcleaner:A}
	at mob_grinding_utils.ModColourManager.registerBlockColourHandlers(ModColourManager.java:39) ~[mob_grinding_utils:1.16.5-0.4.37] {re:classloading}
	at mob_grinding_utils.ModColourManager.registerColourHandlers(ModColourManager.java:22) ~[mob_grinding_utils:1.16.5-0.4.37] {re:classloading}
	at mob_grinding_utils.MobGrindingUtils.doClientStuff(MobGrindingUtils.java:194) ~[mob_grinding_utils:1.16.5-0.4.37] {re:classloading}
	at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247) ~[eventbus-4.0.0.jar:?] {}
	at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239) ~[eventbus-4.0.0.jar:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-4.0.0.jar:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-4.0.0.jar:?] {}
	at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:106) ~[forge:36.2] {re:classloading}
	at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$4(ModContainer.java:107) ~[forge:?] {re:classloading}
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736) [?:?] {}
	at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1728) [?:?] {}
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) [?:?] {}
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) [?:?] {}
	at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) [?:?] {re:computing_frames}
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) [?:?] {re:computing_frames}
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) [?:?] {}