geforkt von Mirrors/Paper
Remove redundant GameProfileCache diff
Dieser Commit ist enthalten in:
Ursprung
57a5d8880e
Commit
535cd27411
@ -51,7 +51,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ return com.destroystokyo.paper.PaperConfig.isProxyOnlineMode(); // Paper
|
+ return com.destroystokyo.paper.PaperConfig.isProxyOnlineMode(); // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void add(GameProfile profile) { // Paper - synchronize
|
public void add(GameProfile profile) {
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/OldUsersConverter.java b/src/main/java/net/minecraft/server/players/OldUsersConverter.java
|
diff --git a/src/main/java/net/minecraft/server/players/OldUsersConverter.java b/src/main/java/net/minecraft/server/players/OldUsersConverter.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/players/OldUsersConverter.java
|
--- a/src/main/java/net/minecraft/server/players/OldUsersConverter.java
|
||||||
|
@ -1,15 +1,8 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Aikar <aikar@aikar.co>
|
From: Aikar <aikar@aikar.co>
|
||||||
Date: Mon, 16 May 2016 20:47:41 -0400
|
Date: Mon, 16 May 2016 20:47:41 -0400
|
||||||
Subject: [PATCH] Optimize UserCache / Thread Safe
|
Subject: [PATCH] Async GameProfileCache saving
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
1.17: TODO does this need the synchronized blocks anymore?
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
@ -41,15 +34,6 @@ diff --git a/src/main/java/net/minecraft/server/players/GameProfileCache.java b/
|
|||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/players/GameProfileCache.java
|
--- a/src/main/java/net/minecraft/server/players/GameProfileCache.java
|
||||||
+++ b/src/main/java/net/minecraft/server/players/GameProfileCache.java
|
+++ b/src/main/java/net/minecraft/server/players/GameProfileCache.java
|
||||||
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
|
||||||
return GameProfileCache.usesAuthentication;
|
|
||||||
}
|
|
||||||
|
|
||||||
- public void add(GameProfile profile) {
|
|
||||||
+ public synchronized void add(GameProfile profile) { // Paper - synchronize
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
|
||||||
|
|
||||||
calendar.setTime(new Date());
|
|
||||||
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
||||||
GameProfileCache.GameProfileInfo usercache_usercacheentry = new GameProfileCache.GameProfileInfo(profile, date);
|
GameProfileCache.GameProfileInfo usercache_usercacheentry = new GameProfileCache.GameProfileInfo(profile, date);
|
||||||
|
|
||||||
@ -59,14 +43,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
private long getNextOperation() {
|
private long getNextOperation() {
|
||||||
return this.operationCount.incrementAndGet();
|
|
||||||
}
|
|
||||||
|
|
||||||
- public Optional<GameProfile> get(String name) {
|
|
||||||
+ public synchronized Optional<GameProfile> get(String name) { // Paper - synchronize
|
|
||||||
String s1 = name.toLowerCase(Locale.ROOT);
|
|
||||||
GameProfileCache.GameProfileInfo usercache_usercacheentry = (GameProfileCache.GameProfileInfo) this.profilesByName.get(s1);
|
|
||||||
boolean flag = false;
|
|
||||||
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +73,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
} catch (IOException ioexception) {
|
} catch (IOException ioexception) {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
-
|
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ };
|
+ };
|
||||||
+ if (asyncSave) {
|
+ if (asyncSave) {
|
||||||
@ -106,6 +81,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ save.run();
|
+ save.run();
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Stream<GameProfileCache.GameProfileInfo> getTopMRUProfiles(int limit) {
|
|
@ -607,7 +607,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ @Nullable public GameProfile getProfileIfCached(String name) {
|
+ public @Nullable GameProfile getProfileIfCached(String name) {
|
||||||
+ GameProfileCache.GameProfileInfo entry = this.profilesByName.get(name.toLowerCase(Locale.ROOT));
|
+ GameProfileCache.GameProfileInfo entry = this.profilesByName.get(name.toLowerCase(Locale.ROOT));
|
||||||
+ if (entry == null) {
|
+ if (entry == null) {
|
||||||
+ return null;
|
+ return null;
|
||||||
@ -617,7 +617,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ }
|
+ }
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
+
|
+
|
||||||
public synchronized Optional<GameProfile> get(String name) { // Paper - synchronize
|
public Optional<GameProfile> get(String name) {
|
||||||
String s1 = name.toLowerCase(Locale.ROOT);
|
String s1 = name.toLowerCase(Locale.ROOT);
|
||||||
GameProfileCache.GameProfileInfo usercache_usercacheentry = (GameProfileCache.GameProfileInfo) this.profilesByName.get(s1);
|
GameProfileCache.GameProfileInfo usercache_usercacheentry = (GameProfileCache.GameProfileInfo) this.profilesByName.get(s1);
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
||||||
Date: Sat, 11 Jul 2020 05:09:28 -0700
|
Date: Sat, 11 Jul 2020 05:09:28 -0700
|
||||||
Subject: [PATCH] Separate lookup locking from state access in UserCache
|
Subject: [PATCH] Fix GameProfileCache concurrency
|
||||||
|
|
||||||
Prevent lookups from stalling simple state access/write calls
|
Separate lookup and state access locks prevent lookups
|
||||||
|
from stalling simple state access/write calls
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/GameProfileCache.java b/src/main/java/net/minecraft/server/players/GameProfileCache.java
|
diff --git a/src/main/java/net/minecraft/server/players/GameProfileCache.java b/src/main/java/net/minecraft/server/players/GameProfileCache.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
@ -37,19 +38,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
|
||||||
return com.destroystokyo.paper.PaperConfig.isProxyOnlineMode(); // Paper
|
|
||||||
}
|
|
||||||
|
|
||||||
- public synchronized void add(GameProfile profile) { // Paper - synchronize
|
|
||||||
+ public void add(GameProfile profile) { // Paper - synchronize // Paper - allow better concurrency
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
|
||||||
|
|
||||||
calendar.setTime(new Date());
|
|
||||||
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
@@ -0,0 +0,0 @@ public class GameProfileCache {
|
||||||
|
|
||||||
// Paper start
|
// Paper start
|
||||||
@Nullable public GameProfile getProfileIfCached(String name) {
|
public @Nullable GameProfile getProfileIfCached(String name) {
|
||||||
+ try { this.stateLock.lock(); // Paper - allow better concurrency
|
+ try { this.stateLock.lock(); // Paper - allow better concurrency
|
||||||
GameProfileCache.GameProfileInfo entry = this.profilesByName.get(name.toLowerCase(Locale.ROOT));
|
GameProfileCache.GameProfileInfo entry = this.profilesByName.get(name.toLowerCase(Locale.ROOT));
|
||||||
if (entry == null) {
|
if (entry == null) {
|
||||||
@ -61,8 +53,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
// Paper end
|
// Paper end
|
||||||
|
|
||||||
- public synchronized Optional<GameProfile> get(String name) { // Paper - synchronize
|
public Optional<GameProfile> get(String name) {
|
||||||
+ public Optional<GameProfile> get(String name) { // Paper - synchronize // Paper start - allow better concurrency
|
|
||||||
String s1 = name.toLowerCase(Locale.ROOT);
|
String s1 = name.toLowerCase(Locale.ROOT);
|
||||||
+ boolean stateLocked = true; try { this.stateLock.lock(); // Paper - allow better concurrency
|
+ boolean stateLocked = true; try { this.stateLock.lock(); // Paper - allow better concurrency
|
||||||
GameProfileCache.GameProfileInfo usercache_usercacheentry = (GameProfileCache.GameProfileInfo) this.profilesByName.get(s1);
|
GameProfileCache.GameProfileInfo usercache_usercacheentry = (GameProfileCache.GameProfileInfo) this.profilesByName.get(s1);
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren