[SPIGOT-5032] Loading another chunk inside the ChunkLoadEvent deadlocks the server Created: 05/Jun/19  Updated: 06/Jun/19  Resolved: 05/Jun/19

Status: Resolved
Project: Spigot
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Irmo van den Berge Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: 1.14.2, ChunkLoadEvent, chunkload, crash, freeze
Environment:

Windows 7 64 Bit - Java 8 - 2GB of RAM


Attachments: File ChunkAccessBugTest-1.0.jar    
Issue Links:
Duplicate
duplicates SPIGOT-4849 Spigot crashes running custom ChunkGe... Resolved
Version: This server is running CraftBukkit version git-Spigot-baafee9-043d31d (MC: 1.14.2) (Implementing API version 1.14.2-R0.1-SNAPSHOT)
Plugin: See embed
Guidelines Read: Yes

 Description   

Hope this issue was not already reported. It was similar to another issue, except this one is more bukkit/plugin-related. This issue is occurring since the 1.14+ versions.

Loading another chunk (that is not already loaded) inside the Bukkit ChunkLoadEvent causes the server to deadlock.

For example, this simple test reproduces the issue. Note the swapped x/z so it loads mirrored chunks (avoids a load loop). I register the listener some ticks delayed so it doesn't deadlock during startup instantly.

    @EventHandler
    public void onChunkLoad(ChunkLoadEvent event) {
        event.getWorld().getChunkAt(event.getChunk().getZ(), event.getChunk().getX());
    }

 

Once registered and a chunk loads, the server deadlocks, with thread stack traces as follows:

------------------------------
The server has stopped responding! This is (probably) not a Spigot bug.
If you see a plugin in the Server thread dump below, then please report it to that author
    *Especially* if it looks like HTTP or MySQL operations are occurring
If you see a world save or edit, then it means you did far more than your server can handle at once
    If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes
If you are unsure or still think this is a Spigot bug, please report to https://www.spigotmc.org/
Be sure to include ALL relevant console errors and Minecraft crash reports
Spigot version: git-Spigot-baafee9-043d31d (MC: 1.14.2)
------------------------------
Server thread dump (Look for plugins here before reporting to Spigot!):
------------------------------
Current Thread: Server thread
    PID: 24 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:235)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.awaitTasks(SourceFile:125)
        app//net.minecraft.server.v1_14_R1.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:93)
        app//net.minecraft.server.v1_14_R1.IChunkProvider.getChunkAt(SourceFile:16)
        app//org.bukkit.craftbukkit.v1_14_R1.CraftWorld.getChunkAt(CraftWorld.java:322)
        com.bergerkiller.bukkit.chunkaccessbug.Main.onChunkLoad(Main.java:27)
        java.base@12/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        java.base@12/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        java.base@12/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.base@12/java.lang.reflect.Method.invoke(Method.java:567)
        app//org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316)
        app//org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)
        app//org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:520)
        app//org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:505)
        app//net.minecraft.server.v1_14_R1.Chunk.loadCallback(Chunk.java:522)
        app//net.minecraft.server.v1_14_R1.PlayerChunk.lambda$11(PlayerChunk.java:353)
        app//net.minecraft.server.v1_14_R1.PlayerChunk$$Lambda$2556/0x0000000801b4c440.accept(Unknown Source)
        app//com.mojang.datafixers.util.Either$Left.ifLeft(Either.java:43)
        app//net.minecraft.server.v1_14_R1.PlayerChunk.lambda$10(PlayerChunk.java:351)
        app//net.minecraft.server.v1_14_R1.PlayerChunk$$Lambda$2474/0x0000000801b2c440.accept(Unknown Source)
        java.base@12/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714)
        java.base@12/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
        java.base@12/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:610)
        java.base@12/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:649)
        java.base@12/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
        app//net.minecraft.server.v1_14_R1.ChunkTaskQueueSorter.b(SourceFile:57)
        app//net.minecraft.server.v1_14_R1.ChunkTaskQueueSorter$$Lambda$2495/0x0000000801b34440.run(Unknown Source)
        app//net.minecraft.server.v1_14_R1.ThreadedMailbox.e(SourceFile:83)
        app//net.minecraft.server.v1_14_R1.ThreadedMailbox.a(SourceFile:123)
        app//net.minecraft.server.v1_14_R1.ThreadedMailbox.run(SourceFile:91)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeTask(SourceFile:135)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeNext(SourceFile:114)
        app//net.minecraft.server.v1_14_R1.ChunkProviderServer$a.executeNext(ChunkProviderServer.java:509)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.awaitTasks(SourceFile:123)
        app//net.minecraft.server.v1_14_R1.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:93)
        app//net.minecraft.server.v1_14_R1.World.getChunkAt(World.java:212)
        app//net.minecraft.server.v1_14_R1.IWorldReader.getChunkAt(SourceFile:105)
        app//net.minecraft.server.v1_14_R1.World.getChunkAt(World.java:207)
        app//net.minecraft.server.v1_14_R1.Entity.setLocation(Entity.java:1272)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.internalTeleport(PlayerConnection.java:1105)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1067)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1040)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1031)
        app//net.minecraft.server.v1_14_R1.PlayerList.a(PlayerList.java:165)
        app//net.minecraft.server.v1_14_R1.LoginListener.c(LoginListener.java:149)
        app//net.minecraft.server.v1_14_R1.LoginListener.tick(LoginListener.java:53)
        app//net.minecraft.server.v1_14_R1.NetworkManager.a(NetworkManager.java:230)
        app//net.minecraft.server.v1_14_R1.ServerConnection.c(ServerConnection.java:119)
        app//net.minecraft.server.v1_14_R1.MinecraftServer.b(MinecraftServer.java:1080)
        app//net.minecraft.server.v1_14_R1.DedicatedServer.b(DedicatedServer.java:396)
        app//net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:956)
        app//net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:801)
        java.base@12/java.lang.Thread.run(Thread.java:835)
------------------------------
Entire Thread Dump:
------------------------------
Current Thread: Reference Handler
    PID: 2 | Suspended: false | Native: false | State: RUNNABLE
    Stack:
        java.base@12/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
        java.base@12/java.lang.ref.Reference.processPendingReferences(Reference.java:241)
        java.base@12/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:213)
------------------------------
Current Thread: Finalizer
    PID: 3 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/java.lang.Object.wait(Native Method)
        java.base@12/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
        java.base@12/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
        java.base@12/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:170)
------------------------------
Current Thread: Signal Dispatcher
    PID: 4 | Suspended: false | Native: false | State: RUNNABLE
    Stack:
------------------------------
Current Thread: Attach Listener
    PID: 5 | Suspended: false | Native: false | State: RUNNABLE
    Stack:
------------------------------
Current Thread: Common-Cleaner
    PID: 12 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/java.lang.Object.wait(Native Method)
        java.base@12/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
        java.base@12/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:148)
        java.base@12/java.lang.Thread.run(Thread.java:835)
        java.base@12/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:134)
------------------------------
Current Thread: Server-Worker-1
    PID: 16 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.parkUntil(LockSupport.java:276)
        java.base@12/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1619)
        java.base@12/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
------------------------------
Current Thread: Server-Worker-2
    PID: 17 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
        java.base@12/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1628)
        java.base@12/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
------------------------------
Current Thread: Server-Worker-3
    PID: 18 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
        java.base@12/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1628)
        java.base@12/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
------------------------------
Current Thread: Server-Worker-4
    PID: 20 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
        java.base@12/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1628)
        java.base@12/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
------------------------------
Current Thread: Server-Worker-5
    PID: 19 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
        java.base@12/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1628)
        java.base@12/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
------------------------------
Current Thread: Server-Worker-6
    PID: 21 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
        java.base@12/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1628)
        java.base@12/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
------------------------------
Current Thread: Snooper Timer
    PID: 23 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/java.lang.Object.wait(Native Method)
        java.base@12/java.lang.Object.wait(Object.java:326)
        java.base@12/java.util.TimerThread.mainLoop(Timer.java:527)
        java.base@12/java.util.TimerThread.run(Timer.java:506)
------------------------------
Current Thread: Server Infinisleeper
    PID: 27 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/java.lang.Thread.sleep(Native Method)
        app//net.minecraft.server.v1_14_R1.DedicatedServer$1.run(DedicatedServer.java:69)
------------------------------
Current Thread: Server thread
    PID: 24 | Suspended: false | Native: false | State: TIMED_WAITING
    Thread is waiting on monitor(s):
        Locked on:app//org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:505)
        Locked on:app//net.minecraft.server.v1_14_R1.ServerConnection.c(ServerConnection.java:119)
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:235)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.awaitTasks(SourceFile:125)
        app//net.minecraft.server.v1_14_R1.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:93)
        app//net.minecraft.server.v1_14_R1.IChunkProvider.getChunkAt(SourceFile:16)
        app//org.bukkit.craftbukkit.v1_14_R1.CraftWorld.getChunkAt(CraftWorld.java:322)
        com.bergerkiller.bukkit.chunkaccessbug.Main.onChunkLoad(Main.java:27)
        java.base@12/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        java.base@12/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        java.base@12/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.base@12/java.lang.reflect.Method.invoke(Method.java:567)
        app//org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316)
        app//org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)
        app//org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:520)
        app//org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:505)
        app//net.minecraft.server.v1_14_R1.Chunk.loadCallback(Chunk.java:522)
        app//net.minecraft.server.v1_14_R1.PlayerChunk.lambda$11(PlayerChunk.java:353)
        app//net.minecraft.server.v1_14_R1.PlayerChunk$$Lambda$2556/0x0000000801b4c440.accept(Unknown Source)
        app//com.mojang.datafixers.util.Either$Left.ifLeft(Either.java:43)
        app//net.minecraft.server.v1_14_R1.PlayerChunk.lambda$10(PlayerChunk.java:351)
        app//net.minecraft.server.v1_14_R1.PlayerChunk$$Lambda$2474/0x0000000801b2c440.accept(Unknown Source)
        java.base@12/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714)
        java.base@12/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
        java.base@12/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:610)
        java.base@12/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:649)
        java.base@12/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
        app//net.minecraft.server.v1_14_R1.ChunkTaskQueueSorter.b(SourceFile:57)
        app//net.minecraft.server.v1_14_R1.ChunkTaskQueueSorter$$Lambda$2495/0x0000000801b34440.run(Unknown Source)
        app//net.minecraft.server.v1_14_R1.ThreadedMailbox.e(SourceFile:83)
        app//net.minecraft.server.v1_14_R1.ThreadedMailbox.a(SourceFile:123)
        app//net.minecraft.server.v1_14_R1.ThreadedMailbox.run(SourceFile:91)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeTask(SourceFile:135)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeNext(SourceFile:114)
        app//net.minecraft.server.v1_14_R1.ChunkProviderServer$a.executeNext(ChunkProviderServer.java:509)
        app//net.minecraft.server.v1_14_R1.IAsyncTaskHandler.awaitTasks(SourceFile:123)
        app//net.minecraft.server.v1_14_R1.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:93)
        app//net.minecraft.server.v1_14_R1.World.getChunkAt(World.java:212)
        app//net.minecraft.server.v1_14_R1.IWorldReader.getChunkAt(SourceFile:105)
        app//net.minecraft.server.v1_14_R1.World.getChunkAt(World.java:207)
        app//net.minecraft.server.v1_14_R1.Entity.setLocation(Entity.java:1272)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.internalTeleport(PlayerConnection.java:1105)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1067)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1040)
        app//net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1031)
        app//net.minecraft.server.v1_14_R1.PlayerList.a(PlayerList.java:165)
        app//net.minecraft.server.v1_14_R1.LoginListener.c(LoginListener.java:149)
        app//net.minecraft.server.v1_14_R1.LoginListener.tick(LoginListener.java:53)
        app//net.minecraft.server.v1_14_R1.NetworkManager.a(NetworkManager.java:230)
        app//net.minecraft.server.v1_14_R1.ServerConnection.c(ServerConnection.java:119)
        app//net.minecraft.server.v1_14_R1.MinecraftServer.b(MinecraftServer.java:1080)
        app//net.minecraft.server.v1_14_R1.DedicatedServer.b(DedicatedServer.java:396)
        app//net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:956)
        app//net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:801)
        java.base@12/java.lang.Thread.run(Thread.java:835)
------------------------------
Current Thread: DestroyJavaVM
    PID: 29 | Suspended: false | Native: false | State: RUNNABLE
    Stack:
------------------------------
Current Thread: Thread-2
    PID: 30 | Suspended: false | Native: false | State: WAITING
    Stack:
        java.base@12/jdk.internal.misc.Unsafe.park(Native Method)
        java.base@12/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
        java.base@12/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
        java.base@12/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
        app//com.mojang.util.QueueLogAppender.getNextLogEvent(QueueLogAppender.java:77)
        app//org.bukkit.craftbukkit.v1_14_R1.util.TerminalConsoleWriterThread.run(TerminalConsoleWriterThread.java:30)
------------------------------
Current Thread: Server console handler
    PID: 28 | Suspended: false | Native: true | State: RUNNABLE
    Thread is waiting on monitor(s):
        Locked on:java.base@12/java.io.BufferedInputStream.read(BufferedInputStream.java:271)
        Locked on:app//org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:261)
        Locked on:app//org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:198)
    Stack:
        java.base@12/java.io.FileInputStream.readBytes(Native Method)
        java.base@12/java.io.FileInputStream.read(FileInputStream.java:273)
        java.base@12/java.io.BufferedInputStream.fill(BufferedInputStream.java:252)
        java.base@12/java.io.BufferedInputStream.read(BufferedInputStream.java:271)
        app//org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:248)
        app//org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:261)
        app//org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:198)
        app//org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:2145)
        app//org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLineSimple(ConsoleReader.java:3183)
        app//org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:2333)
        app//org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:2269)
        app//org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:2257)
        app//net.minecraft.server.v1_14_R1.DedicatedServer$2.run(DedicatedServer.java:97)
------------------------------
Current Thread: Spigot Watchdog Thread
    PID: 31 | Suspended: false | Native: false | State: RUNNABLE
    Stack:
        java.management@12/sun.management.ThreadImpl.dumpThreads0(Native Method)
        java.management@12/sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:502)
        java.management@12/sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:490)
        app//org.spigotmc.WatchdogThread.run(WatchdogThread.java:86)
------------------------------
Current Thread: Spigot Metrics Thread
    PID: 32 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/java.lang.Object.wait(Native Method)
        java.base@12/java.util.TimerThread.mainLoop(Timer.java:553)
        java.base@12/java.util.TimerThread.run(Timer.java:506)
------------------------------
Current Thread: ObjectCleanerThread
    PID: 33 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/java.lang.Object.wait(Native Method)
        java.base@12/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
        app//io.netty.util.internal.ObjectCleaner$1.run(ObjectCleaner.java:54)
        app//io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        java.base@12/java.lang.Thread.run(Thread.java:835)
------------------------------
Current Thread: Netty Server IO #0
    PID: 34 | Suspended: false | Native: false | State: RUNNABLE
    Thread is waiting on monitor(s):
        Locked on:java.base@12/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
        Locked on:java.base@12/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
    Stack:
        java.base@12/sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
        java.base@12/sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:339)
        java.base@12/sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:167)
        java.base@12/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
        java.base@12/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:136)
        app//io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
        app//io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
        app//io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
        java.base@12/java.lang.Thread.run(Thread.java:835)
------------------------------
Current Thread: Metrics updating thread of My_Worlds
    PID: 35 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/java.lang.Thread.sleep(Native Method)
        com.bergerkiller.bukkit.common.metrics.Metrics$1.run(Metrics.java:277)
------------------------------
Current Thread: Metrics updating thread of Maplands
    PID: 36 | Suspended: false | Native: false | State: TIMED_WAITING
    Stack:
        java.base@12/java.lang.Thread.sleep(Native Method)
        com.bergerkiller.bukkit.common.metrics.Metrics$1.run(Metrics.java:277)
------------------------------
Current Thread: Netty Server IO #1
    PID: 37 | Suspended: false | Native: false | State: RUNNABLE
    Thread is waiting on monitor(s):
        Locked on:java.base@12/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
        Locked on:java.base@12/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
    Stack:
        java.base@12/sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
        java.base@12/sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:339)
        java.base@12/sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:167)
        java.base@12/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
        java.base@12/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:136)
        app//io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
        app//io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
        app//io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
        java.base@12/java.lang.Thread.run(Thread.java:835)
------------------------------
Startup script './start.sh' does not exist! Stopping server.
Stopping server

Obviously the test code is not what happens in practice. What happens in practice is that some logic runs during a chunk load that accidentally triggers loading a neighbouring chunk that is not yet loaded. For example, to detect structures.

In 1.13.2 and before this sort of thing was still possible, but since 1.14 it is not. If loading new chunks inside a ChunkLoadEvent is no longer permitted (or never was to begin with), you can mark this issue as dontfix, but then me and others at least know about it.

Ive included ChunkAccessBugTest-1.0.jara small plugin jar to showcase this bug that uses the aforementioned snippet.

Sidenote: Same happens in ChunkUnloadEvent, though loading new chunks in that event is a bug in of itself.



 Comments   
Comment by Irmo van den Berge [ 06/Jun/19 ]

I'll be watching SPIGOT-4849  Thanks

Generated at Tue Apr 15 11:10:19 UTC 2025 using Jira 10.3.3#10030003-sha1:d220e3fefc8dfc6d47f522d3b9a20c1455e12b7b.