Biome Makeover

Biome Makeover

4M Downloads

Tumbleweeds are able to deadlock the server

TelepathicGrunt opened this issue ยท 2 comments

commented

I was running World Blender with All of Fabric 6 and the server deadlocked. I opened up VisualVM and did a thread dump and found that the server thread was stuck on at party.lemons.biomemakeover.world.TumbleweedSpawner.update(TumbleweedSpawner.java:47)

image

Full thread dump here: https://paste.ee/p/mgnh0

Here's a deobfuscated stacktrace of the server thread:


"Server thread" #410 prio=5 os_prio=0 tid=0x000001b0290bb800 nid=0xa04c runnable [0x000000a02d8fe000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000539b6eb08> (a java.lang.String)
        at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
        at net.minecraft.util.thread.ThreadExecutor.waitForTasks(ThreadExecutor.java:518)
        at net.minecraft.util.thread.ThreadExecutor.runTasks(ThreadExecutor.java:129)
        at net.minecraft.server.world.ServerChunkManager.getChunkBlocking(ServerChunkManager.java:1269)
        at net.minecraft.server.world.ServerChunkManager.getChunk(ServerChunkManager.java:1165)
        at net.minecraft.world.World.getChunkLithium(World.java:6740)
        at net.minecraft.world.World.getChunk(World.java:6726)
        at net.minecraft.world.World.getBlockState(World.java:408)
        at net.minecraft.world.WorldView.isAir(WorldView.java:85)
        at party.lemons.biomemakeover.world.TumbleweedSpawner.update(TumbleweedSpawner.java:47)
        at party.lemons.biomemakeover.BiomeMakeover$$Lambda$6250/1422038549.onEndTick(Unknown Source)
        at net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents.lambda$static$6(ServerTickEvents.java:108)
        at net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents$$Lambda$3112/1850391384.onEndTick(Unknown Source)
        at net.minecraft.world.World.handler$eba000$tickWorldAfterBlockEntities(World.java:8775)
        at net.minecraft.world.World.tickBlockEntities(World.java:557)
        at net.minecraft.server.world.ServerWorld.tick(ServerWorld.java:429)
        at net.minecraft.server.MinecraftServer.tickWorlds(MinecraftServer.java:871)
        at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:811)
        at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:91)
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:670)
        at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:257)
        at net.minecraft.server.MinecraftServer$$Lambda$10881/1063973963.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

Specifically, my guess is the tumbleweed rolled into an ungenerated chunk, tried to get that chunk, and somehow deadlocked? Very odd

commented

Never seen that before but your guess sounds right. I'll look into it.

commented

Putting out a potential fix (1.2.13). Lemme know if you encounter this again,