From 3798a29f84b69fe6e57fd7fa5f1ddeb70d759005 Mon Sep 17 00:00:00 2001 From: Omer Yacine Date: Mon, 17 Jun 2024 18:51:34 +0200 Subject: [PATCH 1/4] remove unnecessary Arc< The inners are already `Arc<`ed --- mm2src/coins/eth/web3_transport/websocket_transport.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mm2src/coins/eth/web3_transport/websocket_transport.rs b/mm2src/coins/eth/web3_transport/websocket_transport.rs index f458aacc67..8e5fc81dc4 100644 --- a/mm2src/coins/eth/web3_transport/websocket_transport.rs +++ b/mm2src/coins/eth/web3_transport/websocket_transport.rs @@ -47,11 +47,11 @@ pub struct WebsocketTransport { node: WebsocketTransportNode, event_handlers: Vec, pub(crate) gui_auth_validation_generator: Option, - controller_channel: Arc, + controller_channel: ControllerChannel, connection_guard: Arc>, } -#[derive(Debug)] +#[derive(Clone, Debug)] struct ControllerChannel { tx: Arc>>, rx: Arc>>, @@ -90,8 +90,7 @@ impl WebsocketTransport { controller_channel: ControllerChannel { tx: Arc::new(AsyncMutex::new(req_tx)), rx: Arc::new(AsyncMutex::new(req_rx)), - } - .into(), + }, connection_guard: Arc::new(AsyncMutex::new(())), gui_auth_validation_generator: None, last_request_failed: Arc::new(AtomicBool::new(false)), From a394c6aef70473e7be0707e0fe57d79f1952fb37 Mon Sep 17 00:00:00 2001 From: Omer Yacine Date: Mon, 17 Jun 2024 19:57:04 +0200 Subject: [PATCH 2/4] eth websocket: avoid locking control message sender and clone it instead --- mm2src/coins/eth/web3_transport/websocket_transport.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mm2src/coins/eth/web3_transport/websocket_transport.rs b/mm2src/coins/eth/web3_transport/websocket_transport.rs index 8e5fc81dc4..8b130c14fe 100644 --- a/mm2src/coins/eth/web3_transport/websocket_transport.rs +++ b/mm2src/coins/eth/web3_transport/websocket_transport.rs @@ -53,7 +53,7 @@ pub struct WebsocketTransport { #[derive(Clone, Debug)] struct ControllerChannel { - tx: Arc>>, + tx: UnboundedSender, rx: Arc>>, } @@ -88,7 +88,7 @@ impl WebsocketTransport { event_handlers, request_id: Arc::new(AtomicUsize::new(1)), controller_channel: ControllerChannel { - tx: Arc::new(AsyncMutex::new(req_tx)), + tx: req_tx, rx: Arc::new(AsyncMutex::new(req_rx)), }, connection_guard: Arc::new(AsyncMutex::new(())), @@ -309,7 +309,7 @@ impl WebsocketTransport { } pub(crate) async fn stop_connection_loop(&self) { - let mut tx = self.controller_channel.tx.lock().await; + let mut tx = self.controller_channel.tx.clone(); tx.send(ControllerMessage::Close) .await .expect("receiver channel must be alive"); @@ -353,7 +353,7 @@ async fn send_request( }; } - let mut tx = transport.controller_channel.tx.lock().await; + let mut tx = transport.controller_channel.tx.clone(); let (notification_sender, notification_receiver) = futures::channel::oneshot::channel::>(); From 6eb6fc3ad97b812d4029adf20742655d7022e408 Mon Sep 17 00:00:00 2001 From: Omer Yacine Date: Wed, 25 Dec 2024 17:52:03 +0100 Subject: [PATCH 3/4] review(sami): move tx declaration close to where it's being used --- mm2src/coins/eth/web3_transport/websocket_transport.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm2src/coins/eth/web3_transport/websocket_transport.rs b/mm2src/coins/eth/web3_transport/websocket_transport.rs index 263553c248..fd2a87cfd9 100644 --- a/mm2src/coins/eth/web3_transport/websocket_transport.rs +++ b/mm2src/coins/eth/web3_transport/websocket_transport.rs @@ -356,12 +356,12 @@ async fn send_request( serialized_request = serde_json::to_string(&wrapper)?; } - let mut tx = transport.controller_channel.tx.clone(); let (notification_sender, notification_receiver) = oneshot::channel::>(); event_handlers.on_outgoing_request(&request_bytes); + let mut tx = transport.controller_channel.tx.clone(); tx.send(ControllerMessage::Request(WsRequest { request_id, serialized_request, From 8ae149bc194c4bab48a146a8b373e9a74e52306e Mon Sep 17 00:00:00 2001 From: Omer Yacine Date: Wed, 25 Dec 2024 18:01:41 +0100 Subject: [PATCH 4/4] review(sami): free rx end out of the Arc and arc the entire controller channel instead --- .../coins/eth/web3_transport/websocket_transport.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/mm2src/coins/eth/web3_transport/websocket_transport.rs b/mm2src/coins/eth/web3_transport/websocket_transport.rs index fd2a87cfd9..36b13bdb78 100644 --- a/mm2src/coins/eth/web3_transport/websocket_transport.rs +++ b/mm2src/coins/eth/web3_transport/websocket_transport.rs @@ -46,14 +46,14 @@ pub struct WebsocketTransport { node: WebsocketTransportNode, event_handlers: Vec, pub(crate) proxy_sign_keypair: Option, - controller_channel: ControllerChannel, + controller_channel: Arc, connection_guard: Arc>, } -#[derive(Clone, Debug)] +#[derive(Debug)] struct ControllerChannel { tx: UnboundedSender, - rx: Arc>>, + rx: AsyncMutex>, } enum ControllerMessage { @@ -86,10 +86,10 @@ impl WebsocketTransport { node, event_handlers, request_id: Arc::new(AtomicUsize::new(1)), - controller_channel: ControllerChannel { + controller_channel: Arc::new(ControllerChannel { tx: req_tx, - rx: Arc::new(AsyncMutex::new(req_rx)), - }, + rx: AsyncMutex::new(req_rx), + }), connection_guard: Arc::new(AsyncMutex::new(())), proxy_sign_keypair: None, last_request_failed: Arc::new(AtomicBool::new(false)), @@ -356,7 +356,6 @@ async fn send_request( serialized_request = serde_json::to_string(&wrapper)?; } - let (notification_sender, notification_receiver) = oneshot::channel::>(); event_handlers.on_outgoing_request(&request_bytes);