[Bug]: Freeze on World load
canitzp opened this issue ยท 2 comments
Minecraft Version
1.18.1
What happened?
I just wanted to load a new world.
I already have spotted the issue, cause like the log I attached at the bottom shows, it is a "ConcurrentModificationException" and I found this code snippet: https://github.com/TheIllusiveC4/VeinMining/blob/1.18.x/forge/src/main/java/top/theillusivec4/veinmining/veinmining/logic/BlockGroups.java#L47-L48
There you change the map, while iterating over it, which is not allowed and lead to random crashes, but only sometimes and under some vms never.
The two possible fixes are:
- iterate of a copy of the map
- change the map type from HashMap to ConcurrentHashMap (or something like that), which can handle simultanious read and writes
I would prefer Number 1.
How do you trigger this bug?
Load a new world.
Loader
Forge
Loader Version
39.0.75
Mod Version
1.18.1-0.16
Relevant Log Outputs
Error in log
[09Feb2022 13:41:13.472] [Server thread/ERROR] [net.minecraftforge.fml.javafmlmod.FMLModContainer/]: Exception caught during firing event: null
Index: 1
Listeners:
0: NORMAL
1: net.minecraftforge.eventbus.EventBus$$Lambda$4519/0x00000008018f2470@96a649f
java.util.ConcurrentModificationException
at java.base/java.util.HashMap.merge(HashMap.java:1385)
at TRANSFORMER/[email protected]/top.theillusivec4.veinmining.veinmining.logic.BlockGroups.init(BlockGroups.java:48)
at TRANSFORMER/[email protected]/top.theillusivec4.veinmining.veinmining.logic.BlockProcessor.rebuild(BlockProcessor.java:43)
at TRANSFORMER/[email protected]/top.theillusivec4.veinmining.VeinMiningMod.bakeConfigs(VeinMiningMod.java:98)
at TRANSFORMER/[email protected]/top.theillusivec4.veinmining.VeinMiningMod.configLoading(VeinMiningMod.java:82)
at MC-BOOTSTRAP/[email protected]/net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247)
at MC-BOOTSTRAP/[email protected]/net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239)
at MC-BOOTSTRAP/[email protected]/net.minecraftforge.eventbus.EventBus.post(EventBus.java:302)
at MC-BOOTSTRAP/[email protected]/net.minecraftforge.eventbus.EventBus.post(EventBus.java:283)
at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.javafmlmod.FMLModContainer.lambda$new$0(FMLModContainer.java:55)
at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.ModContainer.lambda$dispatchConfigEvent$7(ModContainer.java:149)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.ModContainer.dispatchConfigEvent(ModContainer.java:149)
at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.config.ModConfig.fireEvent(ModConfig.java:90)
at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.config.ConfigTracker.openConfig(ConfigTracker.java:76)
at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.config.ConfigTracker.lambda$loadConfigs$1(ConfigTracker.java:64)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at java.base/java.util.Collections$SynchronizedCollection.forEach(Collections.java:2131)
at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.config.ConfigTracker.loadConfigs(ConfigTracker.java:64)
at TRANSFORMER/[email protected]/net.minecraftforge.server.ServerLifecycleHooks.handleServerAboutToStart(ServerLifecycleHooks.java:94)
at TRANSFORMER/[email protected]/net.minecraft.client.server.IntegratedServer.m_7038_(IntegratedServer.java:65)
at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:644)
at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:258)
at java.base/java.lang.Thread.run(Thread.java:833)
[13:41:13] [Server thread/ERROR]: Encountered an unexpected exception
java.util.ConcurrentModificationException: null
at java.util.HashMap.merge(HashMap.java:1385) ~[?:?]
at top.theillusivec4.veinmining.veinmining.logic.BlockGroups.init(BlockGroups.java:48) ~[veinmining-forge-1.18.1-0.16.jar%23279!/:task ':jar' property 'archiveVersion']
at top.theillusivec4.veinmining.veinmining.logic.BlockProcessor.rebuild(BlockProcessor.java:43) ~[veinmining-forge-1.18.1-0.16.jar%23279!/:task ':jar' property 'archiveVersion']
at top.theillusivec4.veinmining.VeinMiningMod.bakeConfigs(VeinMiningMod.java:98) ~[veinmining-forge-1.18.1-0.16.jar%23279!/:task ':jar' property 'archiveVersion']
at top.theillusivec4.veinmining.VeinMiningMod.configLoading(VeinMiningMod.java:82) ~[veinmining-forge-1.18.1-0.16.jar%23279!/:task ':jar' property 'archiveVersion']
at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247) ~[eventbus-5.0.3.jar%2337!/:?]
at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239) ~[eventbus-5.0.3.jar%2337!/:?]
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.3.jar%2337!/:?]
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.3.jar%2337!/:?]
at net.minecraftforge.fml.javafmlmod.FMLModContainer.lambda$new$0(FMLModContainer.java:55) ~[javafmllanguage-1.18.1-39.0.75.jar%23291!/:?]
at net.minecraftforge.fml.ModContainer.lambda$dispatchConfigEvent$7(ModContainer.java:149) ~[fmlcore-1.18.1-39.0.75.jar%23290!/:?]
at java.util.Optional.ifPresent(Optional.java:178) ~[?:?]
at net.minecraftforge.fml.ModContainer.dispatchConfigEvent(ModContainer.java:149) ~[fmlcore-1.18.1-39.0.75.jar%23290!/:?]
at net.minecraftforge.fml.config.ModConfig.fireEvent(ModConfig.java:90) ~[fmlcore-1.18.1-39.0.75.jar%23290!/:?]
at net.minecraftforge.fml.config.ConfigTracker.openConfig(ConfigTracker.java:76) ~[fmlcore-1.18.1-39.0.75.jar%23290!/:?]
at net.minecraftforge.fml.config.ConfigTracker.lambda$loadConfigs$1(ConfigTracker.java:64) ~[fmlcore-1.18.1-39.0.75.jar%23290!/:?]
at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
at java.util.Collections$SynchronizedCollection.forEach(Collections.java:2131) ~[?:?]
at net.minecraftforge.fml.config.ConfigTracker.loadConfigs(ConfigTracker.java:64) ~[fmlcore-1.18.1-39.0.75.jar%23290!/:?]
at net.minecraftforge.server.ServerLifecycleHooks.handleServerAboutToStart(ServerLifecycleHooks.java:94) ~[forge-1.18.1-39.0.75-universal.jar%23293!/:?]
at net.minecraft.client.server.IntegratedServer.m_7038_(IntegratedServer.java:65) ~[client-1.18.1-20211210.034407-srg.jar%23289!/:?]
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:644) ~[client-1.18.1-20211210.034407-srg.jar%23289!/:?]
at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:258) ~[client-1.18.1-20211210.034407-srg.jar%23289!/:?]
at java.lang.Thread.run(Thread.java:833) [?:?]
Huh, that's weird. Certainly the error is pretty clear about its cause, which is what you've pointed out, so I'll work on a fix for that. However, I must be missing something obvious because I can't tell why the CME is occurring. I'm not iterating through the map at all, the only reference to the map is when calling the merge
method. I'm iterating through an unrelated HashSet<String>
created from createGroups
.