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.
The main thing this PR does is add some code to monitor for attempts to acquire a
CoreSuspender
from the DF render thread, which is impermissible and will lead to deadlock. It currently only uses anassert
for this (which means it's only operational in a debug build).It also removes some dead code related to threading and fixes a couple of semantic errors:
Core::Shutdown
attempts to unlock the main core lock, but cannot do so because it always runs on the render thread while the main core lock is held by the simulation thread. This is replaced by an atomic flagshutdown
whichCore::Shutdown
sets and whichCore::Update
checks.CoreSuspender
to save plugin site and world data. Plugin unload during shutdown cannot acquire aCoreSuspender
(because shutdown runs on the render thread), so unload now skips saving plugin site and world data during shutdown. This is harmless because site and world data cannot be saved during shutdown anyway.