Yatopia/patches/removed/server/0024-Akarin-Updated-Save-json-list-async.patch
Ivan Pekov f33511fdd2
Replace asynchronous json list save with json list save timings
so we see if this patch is necessary first. then we will reimplement it properly, as the current patch
is not race condition safe.
2020-10-02 17:54:16 +03:00

55 lines
2.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: tsao chi <tsao-chi@the-lingo.org>
Date: Fri, 31 Jul 2020 22:11:10 -0500
Subject: [PATCH] Akarin Updated Save json list async
diff --git a/src/main/java/net/minecraft/server/JsonList.java b/src/main/java/net/minecraft/server/JsonList.java
index 9213bfb78e92b838189161045e3945588251b486..3fb72d6ee587d66a9b7e1dec27fc4f64b82ab4df 100644
--- a/src/main/java/net/minecraft/server/JsonList.java
+++ b/src/main/java/net/minecraft/server/JsonList.java
@@ -146,6 +146,7 @@ public abstract class JsonList<K, V extends JsonListEntry<K>> {
}
public void save() throws IOException {
+ Runnable runnable = () -> { // Akarin - Save json list async
this.removeStaleEntries(); // Paper - remove expired values before saving
JsonArray jsonarray = new JsonArray();
@@ -155,29 +156,20 @@ public abstract class JsonList<K, V extends JsonListEntry<K>> {
jsonlistentry.getClass();
return (JsonObject) SystemUtils.a(jsonobject, jsonlistentry::a); // CraftBukkit - decompile error
}).forEach(jsonarray::add);
- BufferedWriter bufferedwriter = Files.newWriter(this.c, StandardCharsets.UTF_8);
+ BufferedWriter bufferedwriter = null;
Throwable throwable = null;
try {
+ bufferedwriter = Files.newWriter(this.c, StandardCharsets.UTF_8);
JsonList.b.toJson(jsonarray, bufferedwriter);
} catch (Throwable throwable1) {
- throwable = throwable1;
- throw throwable1;
+ throw new RuntimeException(throwable1);
} finally {
- if (bufferedwriter != null) {
- if (throwable != null) {
- try {
- bufferedwriter.close();
- } catch (Throwable throwable2) {
- throwable.addSuppressed(throwable2);
- }
- } else {
- bufferedwriter.close();
- }
- }
-
+ org.apache.commons.io.IOUtils.closeQuietly(bufferedwriter);
}
+ }; // Akarin - Save json list async
+ MCUtil.scheduleAsyncTask(runnable); // Akarin - Save json list async
}
public void load() throws IOException {