Advertisement
Guest User

Untitled

a guest
Sep 6th, 2019
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.28 KB | None | 0 0
  1. diff --git a/src/libstd/sync/mpsc/mod.rs b/src/libstd/sync/mpsc/mod.rs
  2. index 69ecd20106..7c8054e993 100644
  3. --- a/src/libstd/sync/mpsc/mod.rs
  4. +++ b/src/libstd/sync/mpsc/mod.rs
  5. @@ -1418,6 +1418,10 @@ impl<T> Receiver<T> {
  6.              if let Some(new_port) = port_or_empty {
  7.                  unsafe {
  8.                      mem::swap(self.inner_mut(), new_port.inner_mut());
  9. +                    match self.inner() {
  10. +                        Flavor::Shared(ref p) => { p.post_rx_upgrade(); }
  11. +                        _ => {}
  12. +                    }
  13.                  }
  14.              }
  15.  
  16. diff --git a/src/libstd/sync/mpsc/shared.rs b/src/libstd/sync/mpsc/shared.rs
  17. index dbcdcdac93..401e791c67 100644
  18. --- a/src/libstd/sync/mpsc/shared.rs
  19. +++ b/src/libstd/sync/mpsc/shared.rs
  20. @@ -387,6 +387,15 @@ impl<T> Packet<T> {
  21.          }
  22.      }
  23.  
  24. +    // Prepare for RX after an upgrade
  25. +    pub fn post_rx_upgrade(&self) {
  26. +        self.cnt.store(0, Ordering::SeqCst);
  27. +        let ptr = self.to_wake.swap(0, Ordering::SeqCst);
  28. +        if ptr!=0 {
  29. +            let _token = unsafe{ SignalToken::cast_from_usize(ptr) };
  30. +        }
  31. +    }
  32. +
  33.      // Consumes ownership of the 'to_wake' field.
  34.      fn take_to_wake(&self) -> SignalToken {
  35.          let ptr = self.to_wake.load(Ordering::SeqCst);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement