From: Max Fang Date: Wed, 18 Jan 2023 04:37:10 +0000 (-0800) Subject: lightning-net-tokio: Don't require `Arc` X-Git-Tag: v0.0.114-beta~54^2 X-Git-Url: http://git.bitcoin.ninja/?a=commitdiff_plain;h=fce03975076d067b33435aff2d23349c0ec70ab6;p=rust-lightning lightning-net-tokio: Don't require `Arc` --- diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs index bd6f13db8..45fe9b12f 100644 --- a/lightning-net-tokio/src/lib.rs +++ b/lightning-net-tokio/src/lib.rs @@ -123,7 +123,11 @@ struct Connection { id: u64, } impl Connection { - async fn poll_event_process(peer_manager: Arc>, mut event_receiver: mpsc::Receiver<()>) where + async fn poll_event_process( + peer_manager: PM, + mut event_receiver: mpsc::Receiver<()>, + ) where + PM: Deref> + 'static + Send + Sync, CMH: Deref + 'static + Send + Sync, RMH: Deref + 'static + Send + Sync, OMH: Deref + 'static + Send + Sync, @@ -134,7 +138,7 @@ impl Connection { OMH::Target: OnionMessageHandler + Send + Sync, L::Target: Logger + Send + Sync, UMH::Target: CustomMessageHandler + Send + Sync, - { + { loop { if event_receiver.recv().await.is_none() { return; @@ -143,7 +147,14 @@ impl Connection { } } - async fn schedule_read(peer_manager: Arc>, us: Arc>, mut reader: io::ReadHalf, mut read_wake_receiver: mpsc::Receiver<()>, mut write_avail_receiver: mpsc::Receiver<()>) where + async fn schedule_read( + peer_manager: PM, + us: Arc>, + mut reader: io::ReadHalf, + mut read_wake_receiver: mpsc::Receiver<()>, + mut write_avail_receiver: mpsc::Receiver<()>, + ) where + PM: Deref> + 'static + Send + Sync + Clone, CMH: Deref + 'static + Send + Sync, RMH: Deref + 'static + Send + Sync, OMH: Deref + 'static + Send + Sync, @@ -154,10 +165,10 @@ impl Connection { OMH::Target: OnionMessageHandler + 'static + Send + Sync, L::Target: Logger + 'static + Send + Sync, UMH::Target: CustomMessageHandler + 'static + Send + Sync, - { + { // Create a waker to wake up poll_event_process, above let (event_waker, event_receiver) = mpsc::channel(1); - tokio::spawn(Self::poll_event_process(Arc::clone(&peer_manager), event_receiver)); + tokio::spawn(Self::poll_event_process(peer_manager.clone(), event_receiver)); // 8KB is nice and big but also should never cause any issues with stack overflowing. let mut buf = [0; 8192]; @@ -272,7 +283,11 @@ fn get_addr_from_stream(stream: &StdTcpStream) -> Option { /// The returned future will complete when the peer is disconnected and associated handling /// futures are freed, though, because all processing futures are spawned with tokio::spawn, you do /// not need to poll the provided future in order to make progress. -pub fn setup_inbound(peer_manager: Arc>, stream: StdTcpStream) -> impl std::future::Future where +pub fn setup_inbound( + peer_manager: PM, + stream: StdTcpStream, +) -> impl std::future::Future where + PM: Deref> + 'static + Send + Sync + Clone, CMH: Deref + 'static + Send + Sync, RMH: Deref + 'static + Send + Sync, OMH: Deref + 'static + Send + Sync, @@ -321,7 +336,12 @@ pub fn setup_inbound(peer_manager: Arc(peer_manager: Arc>, their_node_id: PublicKey, stream: StdTcpStream) -> impl std::future::Future where +pub fn setup_outbound( + peer_manager: PM, + their_node_id: PublicKey, + stream: StdTcpStream, +) -> impl std::future::Future where + PM: Deref> + 'static + Send + Sync + Clone, CMH: Deref + 'static + Send + Sync, RMH: Deref + 'static + Send + Sync, OMH: Deref + 'static + Send + Sync, @@ -399,7 +419,12 @@ pub fn setup_outbound(peer_manager: Arc(peer_manager: Arc>, their_node_id: PublicKey, addr: SocketAddr) -> Option> where +pub async fn connect_outbound( + peer_manager: PM, + their_node_id: PublicKey, + addr: SocketAddr, +) -> Option> where + PM: Deref> + 'static + Send + Sync + Clone, CMH: Deref + 'static + Send + Sync, RMH: Deref + 'static + Send + Sync, OMH: Deref + 'static + Send + Sync,