mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 17:01:56 +01:00
prevent crashes on expiring map desync, dont spam logs
This commit is contained in:
parent
c041a06904
commit
a6792af72a
1 changed files with 20 additions and 6 deletions
|
@ -11,7 +11,7 @@ not run on every manipulation, and instead to run clean
|
|||
once per tick per expiring map.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ExpiringMap.java b/src/main/java/net/minecraft/server/ExpiringMap.java
|
||||
index 4006f5a69c..49021d29ee 100644
|
||||
index 4006f5a69c..08d41e8cf0 100644
|
||||
--- a/src/main/java/net/minecraft/server/ExpiringMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/ExpiringMap.java
|
||||
@@ -0,0 +0,0 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||
|
@ -116,10 +116,17 @@ index 4006f5a69c..49021d29ee 100644
|
|||
+ @Override
|
||||
+ public T compute(Long aLong, BiFunction<? super Long, ? super T, ? extends T> biFunction) {
|
||||
+ setAccess(aLong);
|
||||
+ return compute(aLong, biFunction);
|
||||
+ return super.compute(aLong, biFunction);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public synchronized void clear() {
|
||||
+ ttl.clear();
|
||||
+ super.clear();
|
||||
+ }
|
||||
+
|
||||
+ private boolean registered = false;
|
||||
+ private boolean hasLeaked = false;
|
||||
+
|
||||
+ // Break clean to its own method to be ticked
|
||||
+ synchronized boolean clean() {
|
||||
|
@ -141,11 +148,18 @@ index 4006f5a69c..49021d29ee 100644
|
|||
}
|
||||
}
|
||||
-
|
||||
+ if (this.ttl.size() != this.size()) {
|
||||
+ MinecraftServer.LOGGER.error("WARNING: ExpiringMap desync - Memory leak risk!");
|
||||
+ for (Entry<T> entry : this.long2ObjectEntrySet()) {
|
||||
+ ttl.putIfAbsent(entry.getLongKey(), now);
|
||||
+ int ttlSize = this.ttl.size();
|
||||
+ int thisSize = this.size();
|
||||
+ if (ttlSize != thisSize) {
|
||||
+ if (!hasLeaked) { // log once
|
||||
+ hasLeaked = true;
|
||||
+ MinecraftServer.LOGGER.warn("WARNING: ExpiringMap desync (" + ttlSize + ":" + thisSize + ")- Memory leak risk! We will recover from this, but this means there is still a bug. Please do not open an issue about this. Mention it in Discord (we don't need everyone reporting the same thing)");
|
||||
+ }
|
||||
+ try {
|
||||
+ for (Entry<T> entry : this.long2ObjectEntrySet()) {
|
||||
+ ttl.putIfAbsent(entry.getLongKey(), now);
|
||||
+ }
|
||||
+ } catch (Exception e) { } // Ignore any como's
|
||||
+ }
|
||||
+ if (isEmpty()) {
|
||||
+ registered = false;
|
||||
|
|
Loading…
Reference in a new issue