From 22bb4da32a0fc71a9119d1fd9a89a8c0909ee75e Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 19 Jan 2013 19:22:07 +1100 Subject: [PATCH] Sync free, but still safe reference cache for chunk loading. --- ...-free-but-safe-chunk-reference-cache.patch | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 CraftBukkit-Patches/0018-Alternate-sync-free-but-safe-chunk-reference-cache.patch diff --git a/CraftBukkit-Patches/0018-Alternate-sync-free-but-safe-chunk-reference-cache.patch b/CraftBukkit-Patches/0018-Alternate-sync-free-but-safe-chunk-reference-cache.patch new file mode 100644 index 0000000000..c95e8b22f5 --- /dev/null +++ b/CraftBukkit-Patches/0018-Alternate-sync-free-but-safe-chunk-reference-cache.patch @@ -0,0 +1,38 @@ +From 369fd92f61f955ef427c3db66a650458b095f26a Mon Sep 17 00:00:00 2001 +From: Mike Primm +Date: Wed, 16 Jan 2013 15:27:22 -0600 +Subject: [PATCH] Alternate, sync-free-but-safe chunk reference cache + +--- + src/main/java/net/minecraft/server/World.java | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index 6e9b13d..e28aa00 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -297,15 +297,13 @@ public abstract class World implements IBlockAccess { + + // CraftBukkit start + public Chunk getChunkAt(int i, int j) { +- Chunk result = null; +- synchronized (this.chunkLock) { +- if (this.lastChunkAccessed == null || this.lastXAccessed != i || this.lastZAccessed != j) { +- this.lastChunkAccessed = this.chunkProvider.getOrCreateChunk(i, j); +- this.lastXAccessed = i; +- this.lastZAccessed = j; +- } +- result = this.lastChunkAccessed; ++ //synchronized (this.chunkLock) { ++ Chunk result = this.lastChunkAccessed; // Exploit fact that read is atomic ++ if (result == null || result.x != i || result.z != j) { ++ result = this.chunkProvider.getOrCreateChunk(i, j); ++ this.lastChunkAccessed = result; // Exploit fact that write is atomic + } ++ //} + return result; + } + // CraftBukkit end +-- +1.8.1-rc2 +