mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-22 08:29:28 +00:00
* Update Leaf API patches to 1.20.5 * Updated Upstream (Purpur API) * Some server patches work * Update 1.20.6 * Some server patches work * Some some server patches work * 0oO0oO0oOo * iI1IiI1i|!il| * Updated Upstream (Gale/Purpur) * Server patches work * Updated Upstream (Gale)
133 lines
7.2 KiB
Diff
133 lines
7.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Xymb <xymb@endcrystal.me>
|
|
Date: Sat, 9 Dec 2023 23:06:25 +0100
|
|
Subject: [PATCH] LinearPurpur: Just remove all locks on region files
|
|
|
|
Original license: MIT
|
|
Original project: https://github.com/StupidCraft/LinearPurpur
|
|
|
|
Original project: https://github.com/xymb-endcrystalme/LinearPaper
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java b/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java
|
|
index e67543ef424d448096379bef118b8cb24b938964..be10a534a8e58e0f96c3b28dc74513e4cfff2464 100644
|
|
--- a/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java
|
|
+++ b/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java
|
|
@@ -835,7 +835,8 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread {
|
|
return Boolean.TRUE;
|
|
}
|
|
|
|
- return file.hasChunk(chunkPos) ? Boolean.TRUE : Boolean.FALSE;
|
|
+ //return file.hasChunk(chunkPos) ? Boolean.TRUE : Boolean.FALSE;
|
|
+ return Boolean.TRUE;
|
|
});
|
|
}
|
|
}
|
|
@@ -1146,7 +1147,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread {
|
|
return function.apply(regionFile);
|
|
} finally {
|
|
if (regionFile != null) {
|
|
- regionFile.getFileLock().unlock(); // LinearPurpur
|
|
+ //regionFile.getFileLock().unlock(); // LinearPurpur
|
|
}
|
|
}
|
|
}
|
|
@@ -1158,7 +1159,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread {
|
|
synchronized (cache) {
|
|
regionFile = cache.getRegionFileIfLoaded(new ChunkPos(chunkX, chunkZ));
|
|
if (regionFile != null) {
|
|
- regionFile.getFileLock().lock(); // LinearPurpur
|
|
+ //regionFile.getFileLock().lock(); // LinearPurpur
|
|
}
|
|
}
|
|
|
|
@@ -1166,7 +1167,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread {
|
|
return function.apply(regionFile);
|
|
} finally {
|
|
if (regionFile != null) {
|
|
- regionFile.getFileLock().unlock(); // LinearPurpur
|
|
+ //regionFile.getFileLock().unlock(); // LinearPurpur
|
|
}
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
|
|
index 8ee307a453e79e59444f5c5b8b45ffc7755237c7..6d696f6945c4e08d58616505b961e56fd5a04fcf 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
|
|
@@ -137,7 +137,7 @@ public class RegionFileStorage implements AutoCloseable {
|
|
// Paper start
|
|
if (lock) {
|
|
// must be in this synchronized block
|
|
- regionfile.getFileLock().lock(); // LinearPurpur
|
|
+ //regionfile.getFileLock().lock(); // LinearPurpur
|
|
}
|
|
// Paper end
|
|
return regionfile;
|
|
@@ -149,6 +149,7 @@ public class RegionFileStorage implements AutoCloseable {
|
|
// Paper end - cache regionfile does not exist state
|
|
if (this.regionCache.size() >= io.papermc.paper.configuration.GlobalConfiguration.get().misc.regionFileCacheSize) { // Paper - Sanitise RegionFileCache and make configurable
|
|
this.regionCache.removeLast().close(); // LinearPurpur
|
|
+ //System.out.println("Region file cache overflowed, closing " + this.regionCache.size()); // LinearPurpur
|
|
}
|
|
|
|
// Paper - only create directory if not existing only - moved down
|
|
@@ -186,7 +187,7 @@ public class RegionFileStorage implements AutoCloseable {
|
|
// Paper start
|
|
if (lock) {
|
|
// must be in this synchronized block
|
|
- regionfile1.getFileLock().lock(); // LinearPurpur
|
|
+ //regionfile1.getFileLock().lock(); // LinearPurpur
|
|
}
|
|
// Paper end
|
|
return regionfile1;
|
|
@@ -266,7 +267,7 @@ public class RegionFileStorage implements AutoCloseable {
|
|
if (!chunkPos.equals(pos)) {
|
|
net.minecraft.server.MinecraftServer.LOGGER.error("Attempting to read chunk data at " + pos + " but got chunk data for " + chunkPos + " instead! Attempting regionfile recalculation for regionfile " + regionfile.getRegionFile().toAbsolutePath()); // LinearPurpur
|
|
if (regionfile.recalculateHeader()) {
|
|
- regionfile.getFileLock().lock(); // otherwise we will unlock twice and only lock once. // LinearPurpur
|
|
+ //regionfile.getFileLock().lock(); // otherwise we will unlock twice and only lock once. // LinearPurpur
|
|
return this.read(pos, regionfile);
|
|
}
|
|
net.minecraft.server.MinecraftServer.LOGGER.error("Can't recalculate regionfile header, regenerating chunk " + pos + " for " + regionfile.getRegionFile().toAbsolutePath()); // LinearPurpur
|
|
@@ -303,7 +304,7 @@ public class RegionFileStorage implements AutoCloseable {
|
|
|
|
return nbttagcompound;
|
|
} finally { // Paper start
|
|
- regionfile.getFileLock().unlock(); // LinearPurpur
|
|
+ //regionfile.getFileLock().unlock(); // LinearPurpur
|
|
} // Paper end
|
|
}
|
|
|
|
@@ -395,7 +396,7 @@ public class RegionFileStorage implements AutoCloseable {
|
|
// Paper end - Chunk save reattempt
|
|
// Paper start - rewrite chunk system
|
|
} finally {
|
|
- regionfile.getFileLock().unlock(); // LinearPurpur
|
|
+ //regionfile.getFileLock().unlock(); // LinearPurpur
|
|
}
|
|
// Paper end - rewrite chunk system
|
|
}
|
|
diff --git a/src/main/java/org/purpurmc/purpur/region/LinearRegionFile.java b/src/main/java/org/purpurmc/purpur/region/LinearRegionFile.java
|
|
index e381b2e3de96c34c2f5ed4ade7ecedd8a2218c15..35d1a070f12bb7a5e4a219cbdfbf7b6999b688f2 100644
|
|
--- a/src/main/java/org/purpurmc/purpur/region/LinearRegionFile.java
|
|
+++ b/src/main/java/org/purpurmc/purpur/region/LinearRegionFile.java
|
|
@@ -61,6 +61,11 @@ public class LinearRegionFile implements AbstractRegionFile, AutoCloseable {
|
|
|
|
if (!regionFile.canRead()) return;
|
|
|
|
+ // LinearPurpur start - Remove all locks
|
|
+ long start = System.currentTimeMillis();
|
|
+ //if (regionFile.toString().contains("region")) while (System.currentTimeMillis() < start + 2000);
|
|
+ // LinearPurpur end
|
|
+
|
|
try (FileInputStream fileStream = new FileInputStream(regionFile);
|
|
DataInputStream rawDataStream = new DataInputStream(fileStream)) {
|
|
|
|
@@ -113,6 +118,7 @@ public class LinearRegionFile implements AbstractRegionFile, AutoCloseable {
|
|
this.bufferUncompressedSize[i] = size;
|
|
}
|
|
}
|
|
+ //System.out.println("Opening region file " + this.regionFile + " took " + (System.currentTimeMillis() - start) + "ms"); // LinearPurpur - Remove all locks
|
|
}
|
|
}
|
|
}
|