Protect the visible chunk map from plugins touching it, trim Timing Errors
Blow up if a plugin tries to mutate visibleChunks directly and prevent them from doing so. Also provide a safe get call if any plugins directly call get on it so that it uses the special logic to check pending. Also restores ABI for the visibleChunks field back to what it was too. Additionally, remove the stack trace from Timings Stack Corruption for any error thrown on Minecraft Timings, and tell them to get the error ABOVE this instead, so people stop giving us useless error reports. Also fixes a memory leak when the source map down sizes but dest map didn't, which resulted in lingering references to old chunk holders. Fixes #3414
This commit is contained in:
parent
18c686576b
commit
edd6b6a2ba
12 changed files with 120 additions and 91 deletions
|
@ -476,10 +476,10 @@ index 0000000000000000000000000000000000000000..a5d13a1e44edb861f45c83a9b4309fbf
|
|||
+}
|
||||
diff --git a/src/main/java/co/aikar/timings/TimingHandler.java b/src/main/java/co/aikar/timings/TimingHandler.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..cc0390c061fc367b80063c6de7e45e1be67c0e07
|
||||
index 0000000000000000000000000000000000000000..199789d56d22fcb1b77ebd56805cc28aa5a5ab0a
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/co/aikar/timings/TimingHandler.java
|
||||
@@ -0,0 +1,227 @@
|
||||
@@ -0,0 +1,226 @@
|
||||
+/*
|
||||
+ * This file is licensed under the MIT License (MIT).
|
||||
+ *
|
||||
|
@ -608,13 +608,12 @@ index 0000000000000000000000000000000000000000..cc0390c061fc367b80063c6de7e45e1b
|
|||
+ TimingHandler last;
|
||||
+ while ((last = TIMING_STACK.removeLast()) != this) {
|
||||
+ last.timingDepth = 0;
|
||||
+ String reportTo;
|
||||
+ if ("Minecraft".equalsIgnoreCase(last.identifier.group)) {
|
||||
+ reportTo = "Paper! This is a potential bug in Paper";
|
||||
+ Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Look above this for any errors and report this to Paper unless it has a plugin in the stack trace (" + last.identifier + " did not stopTiming)");
|
||||
+ } else {
|
||||
+ reportTo = "the plugin " + last.identifier.group + "(Look for errors above this in the logs)";
|
||||
+ Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Report this to the plugin " + last.identifier.group + " (Look for errors above this in the logs) (" + last.identifier + " did not stopTiming)", new Throwable());
|
||||
+ }
|
||||
+ Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Report this to " + reportTo + " (" + last.identifier + " did not stopTiming)", new Throwable());
|
||||
+
|
||||
+ boolean found = TIMING_STACK.contains(this);
|
||||
+ if (!found) {
|
||||
+ // We aren't even in the stack... Don't pop everything
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue