Architectury API

Architectury API

234M Downloads

Arch API event register is not thread safe, causing random crash

BloCamLimb opened this issue ยท 0 comments

commented

@Override
public void register(T listener) {
listeners.add(listener);
invoker = null;
}

Random crashes can occur if listeners are registered concurrently, especially in parallel loading of (Neo)Forge. This bug exists at least in architectury api from MC 1.20 to 1.21.5. In contrast, (Neo)Forge's event bus and Fabric's events are both thread-safe.

My game just crashed as following, with FTBLibrary, randomly:

java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 0
Stacktrace:
    at java.util.ArrayList.add(ArrayList.java:484) ~[?:?] {re:mixin}
    at java.util.ArrayList.add(ArrayList.java:496) ~[?:?] {re:mixin}
    at dev.architectury.event.EventFactory$EventImpl.register(EventFactory.java:217) ~[architectury-9.2.14-forge.jar%23425!/:?] {re:classloading}
    at dev.ftb.mods.ftblibrary.FTBLibrary.<init>(FTBLibrary.java:27) ~[ftb-library-forge-2001.1.4.jar%23498!/:2001.1.4] {re:classloading}
    at dev.ftb.mods.ftblibrary.forge.FTBLibraryForge.<init>(FTBLibraryForge.java:12) ~[ftb-library-forge-2001.1.4.jar%23498!/:2001.1.4] {re:classloading}
    at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:77) ~[javafmllanguage-1.20.1-47.3.22.jar%23675!/:?] {}
    at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$4(ModContainer.java:124) ~[fmlcore-1.20.1-47.3.22.jar%23674!/:?] {re:mixin}
    at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}
    at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}