about summary refs log tree commit diff
path: root/library/std/src/sync
diff options
context:
space:
mode:
authorjoboet <jonasboettiger@icloud.com>2023-02-26 11:57:27 +0100
committerjoboet <jonasboettiger@icloud.com>2023-02-26 11:57:27 +0100
commit4e9e465bd4cbdfe3946ea6f0ff4786f2f495a020 (patch)
treef91ebb9106ab37d79dd2e52d6f060a7129794364 /library/std/src/sync
parent642a3247462a582ee97abea1c06c3fabac3bcb3f (diff)
downloadrust-4e9e465bd4cbdfe3946ea6f0ff4786f2f495a020.tar.gz
rust-4e9e465bd4cbdfe3946ea6f0ff4786f2f495a020.zip
std: disconnect senders before discarding messages
Diffstat (limited to 'library/std/src/sync')
-rw-r--r--library/std/src/sync/mpmc/array.rs9
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.