Assorted fixes and cleanups to rt::comm and rt::kill. #8234
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 4 bugs that prevented the extra::arc and extra::sync tests from passing on the new runtime.
Add SendDeferred trait
I add a non-reschedulingsend_deferred
method to our various channel types. Theextra::sync
concurrency primitives need this guarantee so they can send while inside of an exclusive. (This fixes deterministic deadlocks seen withRUST_THREADS=1
.)ChanOne
suppresses_finalize before rescheduling away to the receiver, so in case it gets a kill signal upon coming back, the destructor is inhibited as desired. (This is pretty uncommon on multiple CPUs but showed up always withRUST_THREADS=1
.)Fix embarrassing bug where 'unkillable' would unwind improperly
I make sure the task's unkillable counter stays consistent when a kill signal is received right at the start of an unkillable section. (This is a very uncommon race and can only occur with multiple CPUs.)Don't fail from kill signals if already unwinding
I do pretty much what it says on the tin. Surprising that it took the whole suite of sync/arc tests to expose this.The other two commits are cleanup.
r @brson