aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0094-Async-GameProfileCache-saving.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0094-Async-GameProfileCache-saving.patch')
-rw-r--r--patches/server/0094-Async-GameProfileCache-saving.patch86
1 files changed, 86 insertions, 0 deletions
diff --git a/patches/server/0094-Async-GameProfileCache-saving.patch b/patches/server/0094-Async-GameProfileCache-saving.patch
new file mode 100644
index 0000000000..40c10d3fe4
--- /dev/null
+++ b/patches/server/0094-Async-GameProfileCache-saving.patch
@@ -0,0 +1,86 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Mon, 16 May 2016 20:47:41 -0400
+Subject: [PATCH] Async GameProfileCache saving
+
+
+diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
+index 9e95cb40ce6839de2582e71576b73cdf8787a042..49c354fa65e0047a367f0a5410c79b8da8693df9 100644
+--- a/src/main/java/net/minecraft/server/MinecraftServer.java
++++ b/src/main/java/net/minecraft/server/MinecraftServer.java
+@@ -985,7 +985,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
+ } catch (java.lang.InterruptedException ignored) {} // Paper
+ if (org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly) {
+ MinecraftServer.LOGGER.info("Saving usercache.json");
+- this.getProfileCache().save();
++ this.getProfileCache().save(false); // Paper
+ }
+ // Spigot end
+
+diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+index 20ff08f1a802d16d2306b570e9fb529946d90f6b..b99c1b62ce01700d5c374a1801e8323d5906255c 100644
+--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+@@ -258,7 +258,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+ }
+
+ if (this.convertOldUsers()) {
+- this.getProfileCache().save();
++ this.getProfileCache().save(false); // Paper
+ }
+
+ if (!OldUsersConverter.serverReadyAfterUserconversion(this)) {
+diff --git a/src/main/java/net/minecraft/server/players/GameProfileCache.java b/src/main/java/net/minecraft/server/players/GameProfileCache.java
+index 975ab6061f9d70eb61885960fdfdb24e71b2239e..fdf2557ed19c6ba9c64eddd2876b2434925dcf36 100644
+--- a/src/main/java/net/minecraft/server/players/GameProfileCache.java
++++ b/src/main/java/net/minecraft/server/players/GameProfileCache.java
+@@ -127,7 +127,7 @@ public class GameProfileCache {
+ GameProfileCache.GameProfileInfo usercache_usercacheentry = new GameProfileCache.GameProfileInfo(profile, date);
+
+ this.safeAdd(usercache_usercacheentry);
+- if( !org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly ) this.save(); // Spigot - skip saving if disabled
++ if( !org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly ) this.save(true); // Spigot - skip saving if disabled // Paper - async
+ }
+
+ private long getNextOperation() {
+@@ -160,7 +160,7 @@ public class GameProfileCache {
+ }
+
+ if (flag && !org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly) { // Spigot - skip saving if disabled
+- this.save();
++ this.save(true); // Paper
+ }
+
+ return optional;
+@@ -274,7 +274,7 @@ public class GameProfileCache {
+ return arraylist;
+ }
+
+- public void save() {
++ public void save(boolean asyncSave) { // Paper
+ JsonArray jsonarray = new JsonArray();
+ DateFormat dateformat = GameProfileCache.createDateFormat();
+
+@@ -282,6 +282,7 @@ public class GameProfileCache {
+ jsonarray.add(GameProfileCache.writeGameProfile(usercache_usercacheentry, dateformat));
+ });
+ String s = this.gson.toJson(jsonarray);
++ Runnable save = () -> { // Paper
+
+ try {
+ BufferedWriter bufferedwriter = Files.newWriter(this.file, StandardCharsets.UTF_8);
+@@ -306,6 +307,14 @@ public class GameProfileCache {
+ } catch (IOException ioexception) {
+ ;
+ }
++ // Paper start
++ };
++ if (asyncSave) {
++ net.minecraft.server.MCUtil.scheduleAsyncTask(save);
++ } else {
++ save.run();
++ }
++ // Paper end
+
+ }
+