From be52edfd68d51612deb1162ce2fff41b82896c12 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 22 Oct 2025 01:10:31 +0800 Subject: refactor: use Arc for Request --- src/network.rs | 22 +++++++++++----------- src/ui.rs | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/network.rs b/src/network.rs index ba9fa59..16bbc91 100644 --- a/src/network.rs +++ b/src/network.rs @@ -25,8 +25,8 @@ use crate::{ #[derive(Deserialize, Serialize, Clone)] // Make possible to take borrowed so we dont need to clone everything pub enum Request { - Block(Block), - Ibd(Option), + Block(Arc), + Ibd(Option>), } #[derive(Default)] @@ -250,7 +250,7 @@ impl Peer { async fn handle(parent: Arc>, req: Request) { match req { - Request::Block(mut block) => { + Request::Block(block) => { if block .pow .is_some() @@ -269,11 +269,11 @@ impl Peer { }; bc.lock() .await - .store(block) + .store((*block).clone()) } else { println!("Mining new block for transaction: {:#?}", block.trans); - block - .calc_set_pow() + let mut mine = (*block).clone(); + mine.calc_set_pow() .await; { let self_bc = { @@ -286,9 +286,9 @@ impl Peer { self_bc .lock() .await - .store(block.clone()); + .store(mine.clone()); } - Network::broadcast(parent, Request::Block(block)).await; + Network::broadcast(parent, Request::Block(Arc::new(mine))).await; } } Request::Ibd(bc) => match bc { @@ -318,8 +318,8 @@ impl Peer { })) { println!("Setting IBD to {:#?} from remote", bc); - *self_bc = bc; - } else if *self_bc != bc { + *self_bc = (*bc).clone(); + } else if *self_bc != *bc { eprintln!("Remote IBD broadcast did not match ours, {:#?} vs. {:#?}", bc, self_bc); } } @@ -341,7 +341,7 @@ impl Peer { return; } println!("Broadcasting as requested"); // TODO: log requester - Network::broadcast(parent, Request::Ibd(Some(bc))).await; + Network::broadcast(parent, Request::Ibd(Some(Arc::new(bc)))).await; } }, } diff --git a/src/ui.rs b/src/ui.rs index f0dc72e..446fdb6 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,4 +1,4 @@ -use std::sync::Weak; +use std::sync::{Arc, Weak}; use bitcoin::{ client::Client, @@ -42,7 +42,7 @@ impl Ui { .upgrade() .unwrap(); let block = Network::new_block(net, trans).await; - return Some(Request::Block(block)); + return Some(Request::Block(Arc::new(block))); } if cmd[0] == "bc" { -- cgit v1.2.3