mirror of
https://github.com/PaperMC/Paper.git
synced 2024-10-29 23:09:33 +01:00
Replace AutoSave Mechanism
The problem here is that MinecraftServer.save(..), will attempt to sleep whilst all pending chunks are written to disk, however due to various and complicated bugs, it will wait for an incorrect amount of chunks, which may cause it to sleep for an overly long amount of time. Instead we will mimic the save-all command in its behaviour, which is both safe and performant.
This commit is contained in:
parent
8bfd4a8ccb
commit
58dc769bb5
40
CraftBukkit-Patches/0094-Replace-AutoSave-Mechanism.patch
Normal file
40
CraftBukkit-Patches/0094-Replace-AutoSave-Mechanism.patch
Normal file
@ -0,0 +1,40 @@
|
||||
From 09283936f2eee905563b6ba5920735fb48ce1ab7 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 12 Jan 2014 21:07:18 +1100
|
||||
Subject: [PATCH] Replace AutoSave Mechanism
|
||||
|
||||
The problem here is that MinecraftServer.save(..), will attempt to sleep whilst all pending chunks are written to disk, however due to various and complicated bugs, it will wait for an incorrect amount of chunks, which may cause it to sleep for an overly long amount of time. Instead we will mimic the save-all command in its behaviour, which is both safe and performant.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index c58c73e..ad95402 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -555,7 +555,16 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
if ((this.autosavePeriod > 0) && ((this.ticks % this.autosavePeriod) == 0)) { // CraftBukkit
|
||||
this.methodProfiler.a("save");
|
||||
this.t.savePlayers();
|
||||
- this.saveChunks(true);
|
||||
+ // Spigot Start
|
||||
+ // We replace this with saving each individual world as this.saveChunks(...) is broken,
|
||||
+ // and causes the main thread to sleep for random amounts of time depending on chunk activity
|
||||
+ server.playerCommandState = true;
|
||||
+ for (World world : worlds) {
|
||||
+ world.getWorld().save();
|
||||
+ }
|
||||
+ server.playerCommandState = false;
|
||||
+ // this.saveChunks(true);
|
||||
+ // Spigot End
|
||||
this.methodProfiler.b();
|
||||
}
|
||||
|
||||
@@ -627,6 +636,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
try {
|
||||
worldserver.doTick();
|
||||
} catch (Throwable throwable) {
|
||||
+ getServer().server.getMessenger().registerOutgoingPluginChannel( null, d );
|
||||
// Spigot Start
|
||||
try {
|
||||
crashreport = CrashReport.a(throwable, "Exception ticking world");
|
||||
--
|
||||
1.8.3.2
|
||||
|
Loading…
Reference in New Issue
Block a user