Fix tasks leaking after match end #1383
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes a pretty critical bug, at the moment the pgm task executor is storing tasks in a skiplist set, that is sorted by natural order of compareTo, however that compareTo of tasks is always 1 or 0 for done/not done, resulting in all tasks but 1 being disregarded as "already in the set".
What this means is at match end (cycling to next match) when it's time to cleanup, it can only cleanup one task, all others are left at mercy of being cleared whenever they next try to run (at which point they see the executor has shutdown and they clean themselves up).
This is in particular bad for one task: the scoreboard rendering one. Because it is intentionally timed out forever so it doesn't render after match end, it leaves a forever lingering task that executes in Integer.MAX_VALUE amount of time, so it is never cleaned, holding a permanent reference to the match object.