]> git.lizzy.rs Git - rust.git/commit
auto merge of #8234 : bblum/rust/assorted-fixes, r=brson
authorbors <bors@rust-lang.org>
Fri, 2 Aug 2013 21:55:54 +0000 (14:55 -0700)
committerbors <bors@rust-lang.org>
Fri, 2 Aug 2013 21:55:54 +0000 (14:55 -0700)
commit3ddc72f69be4d0a2027ff598ad262ea2b2ca3812
tree5942120bc4dba4d4b2da56457b425145030daf29
parentf1c1f92d0c555d6e38ad1cac55926d6d9c9b090f
parent43fecf3556b47305320221586f48f89fe2f6c505
auto merge of #8234 : bblum/rust/assorted-fixes, r=brson

This fixes 4 bugs that prevented the extra::arc and extra::sync tests from passing on the new runtime.

* In ```Add SendDeferred trait``` I add a non-rescheduling ```send_deferred``` method to our various channel types. The ```extra::sync``` concurrency primitives need this guarantee so they can send while inside of an exclusive. (This fixes deterministic deadlocks seen with ```RUST_THREADS=1```.)
* In "Fix nasty double-free bug" I make sure that a ```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 with ```RUST_THREADS=1```.)
* In ```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.)
* In ```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