From 21871d6f44ca8ae81076331a6379d2494d6ddeb0 Mon Sep 17 00:00:00 2001 From: Sebastian Urban Date: Fri, 20 Dec 2024 13:56:49 +0100 Subject: [PATCH] Relax atomic memory orderings --- remoc/src/chmux/client.rs | 2 +- remoc/src/chmux/mux.rs | 14 +++++++------- remoc/src/chmux/sender.rs | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/remoc/src/chmux/client.rs b/remoc/src/chmux/client.rs index 24b6bf0..18489e8 100644 --- a/remoc/src/chmux/client.rs +++ b/remoc/src/chmux/client.rs @@ -297,7 +297,7 @@ impl Client { } } Err(_) => { - if listener_dropped.load(Ordering::SeqCst) { + if listener_dropped.load(Ordering::Relaxed) { Err(ConnectError::Rejected) } else { Err(ConnectError::ChMux) diff --git a/remoc/src/chmux/mux.rs b/remoc/src/chmux/mux.rs index da4bfa8..6d70a95 100644 --- a/remoc/src/chmux/mux.rs +++ b/remoc/src/chmux/mux.rs @@ -418,7 +418,7 @@ where // Ensures that all ports are closed on both sides. terminate &= self.ports.is_empty(); // Ensures that local clients are all dropped or remote listener is dropped. - terminate &= self.all_clients_dropped || self.remote_listener_dropped.load(Ordering::SeqCst); + terminate &= self.all_clients_dropped || self.remote_listener_dropped.load(Ordering::Relaxed); // Ensures that local listener or all remote clients are dropped. terminate &= self.listen_tx.is_none() || self.remote_client_dropped; // No remote port requests are outstanding. @@ -745,7 +745,7 @@ where match event { // Process local connect request. GlobalEvt::ConnectReq(ConnectRequest { local_port, id, sent_tx: _sent_tx, response_tx, wait }) => { - if !self.remote_listener_dropped.load(Ordering::SeqCst) { + if !self.remote_listener_dropped.load(Ordering::Relaxed) { let local_port_num = *local_port; if self.ports.insert(local_port, PortState::Connecting { response_tx }).is_some() { panic!("ConnectRequest for already used local port {local_port_num}"); @@ -1086,12 +1086,12 @@ where .. }) = self.ports.get_mut(&port) { - if !remote_receiver_closed.load(Ordering::SeqCst) { + if !remote_receiver_closed.load(Ordering::Relaxed) { // Disable credits provider. sender_credit_provider.close(true); // Send hangup notifications. - remote_receiver_closed.store(true, Ordering::SeqCst); + remote_receiver_closed.store(true, Ordering::Relaxed); let notifies = remote_receiver_closed_notify.xlock().unwrap().take().unwrap(); for tx in notifies { let _ = tx.send(()); @@ -1122,12 +1122,12 @@ where .. }) = self.ports.get_mut(&port) { - if !remote_receiver_closed.load(Ordering::SeqCst) { + if !remote_receiver_closed.load(Ordering::Relaxed) { // Disable credits provider. sender_credit_provider.close(false); // Send hangup notifications. - remote_receiver_closed.store(true, Ordering::SeqCst); + remote_receiver_closed.store(true, Ordering::Relaxed); let notifies = remote_receiver_closed_notify.xlock().unwrap().take().unwrap(); for tx in notifies { let _ = tx.send(()); @@ -1172,7 +1172,7 @@ where // Remote endpoint will process no more connect requests. MultiplexMsg::ListenerFinish => { - self.remote_listener_dropped.store(true, Ordering::SeqCst); + self.remote_listener_dropped.store(true, Ordering::Relaxed); } // Remote endpoint terminates connection. diff --git a/remoc/src/chmux/sender.rs b/remoc/src/chmux/sender.rs index c87885b..503a327 100644 --- a/remoc/src/chmux/sender.rs +++ b/remoc/src/chmux/sender.rs @@ -435,7 +435,7 @@ impl Sender { /// True, once the remote endpoint has closed its receiver. #[inline] pub fn is_closed(&self) -> bool { - self.hangup_recved.upgrade().map(|hr| hr.load(Ordering::SeqCst)).unwrap_or_default() + self.hangup_recved.upgrade().map(|hr| hr.load(Ordering::Relaxed)).unwrap_or_default() } /// Returns a future that will resolve when the remote endpoint closes its receiver.