diff options
| author | joboet <jonasboettiger@icloud.com> | 2023-02-26 11:57:27 +0100 |
|---|---|---|
| committer | joboet <jonasboettiger@icloud.com> | 2023-02-26 11:57:27 +0100 |
| commit | 4e9e465bd4cbdfe3946ea6f0ff4786f2f495a020 (patch) | |
| tree | f91ebb9106ab37d79dd2e52d6f060a7129794364 /library/std/src | |
| parent | 642a3247462a582ee97abea1c06c3fabac3bcb3f (diff) | |
| download | rust-4e9e465bd4cbdfe3946ea6f0ff4786f2f495a020.tar.gz rust-4e9e465bd4cbdfe3946ea6f0ff4786f2f495a020.zip | |
std: disconnect senders before discarding messages
Diffstat (limited to 'library/std/src')
| -rw-r--r-- | library/std/src/sync/mpmc/array.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/library/std/src/sync/mpmc/array.rs b/library/std/src/sync/mpmc/array.rs index 70381760003..fb893695a9a 100644 --- a/library/std/src/sync/mpmc/array.rs +++ b/library/std/src/sync/mpmc/array.rs @@ -464,14 +464,15 @@ impl<T> Channel<T> { /// ordering or stronger. pub(crate) unsafe fn disconnect_receivers(&self) -> bool { let tail = self.tail.fetch_or(self.mark_bit, Ordering::SeqCst); - self.discard_all_messages(tail); - - if tail & self.mark_bit == 0 { + let disconnected = if tail & self.mark_bit == 0 { self.senders.disconnect(); true } else { false - } + }; + + self.discard_all_messages(tail); + disconnected } /// Discards all messages. |
