Skip to content

Commit 122605f

Browse files
committed
Better handling when server shutdown
1 parent 2832f2e commit 122605f

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

shreddedpaper-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,19 @@
6969
return;
7070
}
7171
}
72-
@@ -2318,12 +_,14 @@
72+
@@ -2318,12 +_,15 @@
7373
this.processedDisconnect = true;
7474
}
7575
// CraftBukkit end
76-
+ player.getBukkitEntity().taskScheduler.schedule(e -> { // ShreddedPaper - run on player's thread
76+
+ final Consumer<Entity> runOnPlayersThread = e -> { // ShreddedPaper - run on player's thread
7777
LOGGER.info("{} lost connection: {}", this.player.getPlainTextName(), details.reason().getString());
7878
// Paper start - Fix kick event leave message not being sent
7979
final net.kyori.adventure.text.Component quitMessage = details.quitMessage().map(io.papermc.paper.adventure.PaperAdventure::asAdventure).orElse(null);
8080
this.removePlayerFromWorld(quitMessage);
8181
// Paper end - Fix kick event leave message not being sent
8282
super.onDisconnect(details);
83-
+ }, e -> LOGGER.error("Failed to run disconnect task for player {}", player.getName().getString(), new Exception("Disconnect task retired")), 1); // ShreddedPaper - run on player's thread
83+
+ }; // ShreddedPaper - run on player's thread
84+
+ if (TickThread.isShutdownThread()) runOnPlayersThread.accept(this.player); else player.getBukkitEntity().taskScheduler.schedule(runOnPlayersThread, e -> LOGGER.error("Failed to run disconnect task for player {}", player.getName().getString(), new Exception("Disconnect task retired")), 1); // ShreddedPaper - run on player's thread
8485
}
8586

8687
private void removePlayerFromWorld() {

shreddedpaper-server/src/main/java/io/multipaper/shreddedpaper/ShreddedPaper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.multipaper.shreddedpaper;
22

3+
import ca.spottedleaf.moonrise.common.util.TickThread;
34
import io.multipaper.shreddedpaper.threading.ShreddedPaperRegionScheduler;
45
import net.minecraft.core.BlockPos;
56
import net.minecraft.server.level.ServerLevel;
@@ -94,7 +95,7 @@ public static void ensureSync(ServerLevel serverLevel1, ChunkPos chunkPos1, Serv
9495
}
9596

9697
public static boolean isSync(ServerLevel serverLevel, ChunkPos chunkPos) {
97-
return serverLevel.chunkScheduler.getRegionLocker().hasWriteLock(RegionPos.forChunk(chunkPos));
98+
return serverLevel.chunkScheduler.getRegionLocker().hasWriteLock(RegionPos.forChunk(chunkPos)) || TickThread.isShutdownThread();
9899
}
99100

100101
}

0 commit comments

Comments
 (0)