diff options
author | Zach Brown <[email protected]> | 2016-10-21 15:42:49 -0500 |
---|---|---|
committer | Zach Brown <[email protected]> | 2016-10-21 15:43:40 -0500 |
commit | 28d9568ed576287055f7a5d3109511bd8f0fbeae (patch) | |
tree | 82bfcffc09a4ebbc6611e8841ee3f81884732a26 /Spigot-Server-Patches/0146-Optimize-UserCache-Thread-Safe.patch | |
parent | 92567cc43a2c246b329db575ae590d97c2fd092d (diff) | |
download | Paper-28d9568ed576287055f7a5d3109511bd8f0fbeae.tar.gz Paper-28d9568ed576287055f7a5d3109511bd8f0fbeae.zip |
Properly update patches for upstream merge
Diffstat (limited to 'Spigot-Server-Patches/0146-Optimize-UserCache-Thread-Safe.patch')
-rw-r--r-- | Spigot-Server-Patches/0146-Optimize-UserCache-Thread-Safe.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0146-Optimize-UserCache-Thread-Safe.patch b/Spigot-Server-Patches/0146-Optimize-UserCache-Thread-Safe.patch new file mode 100644 index 0000000000..869de576af --- /dev/null +++ b/Spigot-Server-Patches/0146-Optimize-UserCache-Thread-Safe.patch @@ -0,0 +1,100 @@ +From 3cb0b6d7c63707cbd9f2b2c7c043f82fc5eda9e6 Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Mon, 16 May 2016 20:47:41 -0400 +Subject: [PATCH] Optimize UserCache / Thread Safe + +Because Techable keeps complaining about how this isn't thread safe, +easier to do this than replace the entire thing. + +Additionally, move Saving of the User cache to be done async, incase +the user never changed the default setting for Spigot's save on stop only. + +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 9455475..a4f7e4d 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -508,7 +508,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + // Spigot start + if (org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly) { + LOGGER.info("Saving usercache.json"); +- this.X.c(); ++ this.X.c(false); // Paper + } + // Spigot end + } +diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java +index ccfc755..989758c 100644 +--- a/src/main/java/net/minecraft/server/UserCache.java ++++ b/src/main/java/net/minecraft/server/UserCache.java +@@ -108,7 +108,7 @@ public class UserCache { + this.a(gameprofile, (Date) null); + } + +- private void a(GameProfile gameprofile, Date date) { ++ private synchronized void a(GameProfile gameprofile, Date date) { // Paper - synchronize + UUID uuid = gameprofile.getId(); + + if (date == null) { +@@ -122,8 +122,9 @@ public class UserCache { + String s = gameprofile.getName().toLowerCase(Locale.ROOT); + UserCache.UserCacheEntry usercache_usercacheentry = new UserCache.UserCacheEntry(gameprofile, date, null); + +- if (this.e.containsKey(uuid)) { ++ //if (this.e.containsKey(uuid)) { // Paper + UserCache.UserCacheEntry usercache_usercacheentry1 = (UserCache.UserCacheEntry) this.e.get(uuid); ++ if (usercache_usercacheentry1 != null) { // Paper + + this.d.remove(usercache_usercacheentry1.a().getName().toLowerCase(Locale.ROOT)); + this.f.remove(gameprofile); +@@ -136,7 +137,7 @@ public class UserCache { + } + + @Nullable +- public GameProfile getProfile(String s) { ++ public synchronized GameProfile getProfile(String s) { // Paper - synchronize + String s1 = s.toLowerCase(Locale.ROOT); + UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) this.d.get(s1); + +@@ -165,7 +166,7 @@ public class UserCache { + return usercache_usercacheentry == null ? null : usercache_usercacheentry.a(); + } + +- public String[] a() { ++ public synchronized String[] a() { // Paper - synchronize + ArrayList arraylist = Lists.newArrayList(this.d.keySet()); + + return (String[]) arraylist.toArray(new String[arraylist.size()]); +@@ -227,8 +228,15 @@ public class UserCache { + + } + ++ // Paper start + public void c() { ++ c(true); ++ } ++ public void c(boolean asyncSave) { ++ // Paper end + String s = this.b.toJson(this.a(org.spigotmc.SpigotConfig.userCacheCap)); ++ Runnable save = () -> { ++ + BufferedWriter bufferedwriter = null; + + try { +@@ -242,6 +250,14 @@ public class UserCache { + } finally { + IOUtils.closeQuietly(bufferedwriter); + } ++ // Paper start ++ }; ++ if (asyncSave) { ++ MCUtil.scheduleAsyncTask(save); ++ } else { ++ save.run(); ++ } ++ // Paper end + + } + +-- +2.9.3 + |