Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/libstd/sync/mpsc/mod.rs b/src/libstd/sync/mpsc/mod.rs
- index 69ecd20106..7c8054e993 100644
- --- a/src/libstd/sync/mpsc/mod.rs
- +++ b/src/libstd/sync/mpsc/mod.rs
- @@ -1418,6 +1418,10 @@ impl<T> Receiver<T> {
- if let Some(new_port) = port_or_empty {
- unsafe {
- mem::swap(self.inner_mut(), new_port.inner_mut());
- + match self.inner() {
- + Flavor::Shared(ref p) => { p.post_rx_upgrade(); }
- + _ => {}
- + }
- }
- }
- diff --git a/src/libstd/sync/mpsc/shared.rs b/src/libstd/sync/mpsc/shared.rs
- index dbcdcdac93..401e791c67 100644
- --- a/src/libstd/sync/mpsc/shared.rs
- +++ b/src/libstd/sync/mpsc/shared.rs
- @@ -387,6 +387,15 @@ impl<T> Packet<T> {
- }
- }
- + // Prepare for RX after an upgrade
- + pub fn post_rx_upgrade(&self) {
- + self.cnt.store(0, Ordering::SeqCst);
- + let ptr = self.to_wake.swap(0, Ordering::SeqCst);
- + if ptr!=0 {
- + let _token = unsafe{ SignalToken::cast_from_usize(ptr) };
- + }
- + }
- +
- // Consumes ownership of the 'to_wake' field.
- fn take_to_wake(&self) -> SignalToken {
- let ptr = self.to_wake.load(Ordering::SeqCst);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement