Skip to content

Commit ae96c7d

Browse files
committed
Pass Event by reference to EventHandler
Passing an Event by reference rather and by move gives more flexibility for composing event handlers without needing to clone events.
1 parent 22f0635 commit ae96c7d

File tree

5 files changed

+27
-29
lines changed

5 files changed

+27
-29
lines changed

lightning-background-processor/src/lib.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ mod tests {
336336
begin_open_channel!($node_a, $node_b, $channel_value);
337337
let events = $node_a.node.get_and_clear_pending_events();
338338
assert_eq!(events.len(), 1);
339-
let (temporary_channel_id, tx) = handle_funding_generation_ready!(events[0], $channel_value);
339+
let (temporary_channel_id, tx) = handle_funding_generation_ready!(&events[0], $channel_value);
340340
end_open_channel!($node_a, $node_b, temporary_channel_id, tx);
341341
tx
342342
}}
@@ -353,14 +353,14 @@ mod tests {
353353
macro_rules! handle_funding_generation_ready {
354354
($event: expr, $channel_value: expr) => {{
355355
match $event {
356-
Event::FundingGenerationReady { ref temporary_channel_id, ref channel_value_satoshis, ref output_script, user_channel_id } => {
357-
assert_eq!(*channel_value_satoshis, $channel_value);
356+
&Event::FundingGenerationReady { temporary_channel_id, channel_value_satoshis, ref output_script, user_channel_id } => {
357+
assert_eq!(channel_value_satoshis, $channel_value);
358358
assert_eq!(user_channel_id, 42);
359359

360360
let tx = Transaction { version: 1 as i32, lock_time: 0, input: Vec::new(), output: vec![TxOut {
361-
value: *channel_value_satoshis, script_pubkey: output_script.clone(),
361+
value: channel_value_satoshis, script_pubkey: output_script.clone(),
362362
}]};
363-
(*temporary_channel_id, tx)
363+
(temporary_channel_id, tx)
364364
},
365365
_ => panic!("Unexpected event"),
366366
}
@@ -414,7 +414,7 @@ mod tests {
414414
// Initiate the background processors to watch each node.
415415
let data_dir = nodes[0].persister.get_data_dir();
416416
let persister = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
417-
let event_handler = |_| {};
417+
let event_handler = |_: &_| {};
418418
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
419419

420420
macro_rules! check_persisted_data {
@@ -467,7 +467,7 @@ mod tests {
467467
let nodes = create_nodes(1, "test_timer_tick_called".to_string());
468468
let data_dir = nodes[0].persister.get_data_dir();
469469
let persister = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
470-
let event_handler = |_| {};
470+
let event_handler = |_: &_| {};
471471
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
472472
loop {
473473
let log_entries = nodes[0].logger.lines.lock().unwrap();
@@ -489,7 +489,7 @@ mod tests {
489489
open_channel!(nodes[0], nodes[1], 100000);
490490

491491
let persister = |_: &_| Err(std::io::Error::new(std::io::ErrorKind::Other, "test"));
492-
let event_handler = |_| {};
492+
let event_handler = |_: &_| {};
493493
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
494494
match bg_processor.join() {
495495
Ok(_) => panic!("Expected error persisting manager"),
@@ -509,7 +509,7 @@ mod tests {
509509

510510
// Set up a background event handler for FundingGenerationReady events.
511511
let (sender, receiver) = std::sync::mpsc::sync_channel(1);
512-
let event_handler = move |event| {
512+
let event_handler = move |event: &Event| {
513513
sender.send(handle_funding_generation_ready!(event, channel_value)).unwrap();
514514
};
515515
let bg_processor = BackgroundProcessor::start(persister.clone(), event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
@@ -535,7 +535,7 @@ mod tests {
535535

536536
// Set up a background event handler for SpendableOutputs events.
537537
let (sender, receiver) = std::sync::mpsc::sync_channel(1);
538-
let event_handler = move |event| sender.send(event).unwrap();
538+
let event_handler = move |event: &Event| sender.send(event.clone()).unwrap();
539539
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
540540

541541
// Force close the channel and check that the SpendableOutputs event was handled.

lightning-net-tokio/src/lib.rs

+10-12
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,25 @@
4343
//! async fn connect_to_node(peer_manager: PeerManager, chain_monitor: Arc<ChainMonitor>, channel_manager: ChannelManager, their_node_id: PublicKey, addr: SocketAddr) {
4444
//! lightning_net_tokio::connect_outbound(peer_manager, their_node_id, addr).await;
4545
//! loop {
46-
//! channel_manager.await_persistable_update();
47-
//! channel_manager.process_pending_events(&|event| {
48-
//! // Handle the event!
49-
//! });
50-
//! chain_monitor.process_pending_events(&|event| {
46+
//! let event_handler = |event: &Event| {
5147
//! // Handle the event!
52-
//! });
48+
//! };
49+
//! channel_manager.await_persistable_update();
50+
//! channel_manager.process_pending_events(&event_handler);
51+
//! chain_monitor.process_pending_events(&event_handler);
5352
//! }
5453
//! }
5554
//!
5655
//! // Begin reading from a newly accepted socket and talk to the peer:
5756
//! async fn accept_socket(peer_manager: PeerManager, chain_monitor: Arc<ChainMonitor>, channel_manager: ChannelManager, socket: TcpStream) {
5857
//! lightning_net_tokio::setup_inbound(peer_manager, socket);
5958
//! loop {
60-
//! channel_manager.await_persistable_update();
61-
//! channel_manager.process_pending_events(&|event| {
62-
//! // Handle the event!
63-
//! });
64-
//! chain_monitor.process_pending_events(&|event| {
59+
//! let event_handler = |event: &Event| {
6560
//! // Handle the event!
66-
//! });
61+
//! };
62+
//! channel_manager.await_persistable_update();
63+
//! channel_manager.process_pending_events(&event_handler);
64+
//! chain_monitor.process_pending_events(&event_handler);
6765
//! }
6866
//! }
6967
//! ```

lightning/src/chain/chainmonitor.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ where C::Target: chain::Filter,
144144
pub fn get_and_clear_pending_events(&self) -> Vec<events::Event> {
145145
use util::events::EventsProvider;
146146
let events = core::cell::RefCell::new(Vec::new());
147-
let event_handler = |event| events.borrow_mut().push(event);
147+
let event_handler = |event: &events::Event| events.borrow_mut().push(event.clone());
148148
self.process_pending_events(&event_handler);
149149
events.into_inner()
150150
}
@@ -327,7 +327,7 @@ impl<ChannelSigner: Sign, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> even
327327
pending_events.append(&mut monitor.get_and_clear_pending_events());
328328
}
329329
for event in pending_events.drain(..) {
330-
handler.handle_event(event);
330+
handler.handle_event(&event);
331331
}
332332
}
333333
}

lightning/src/ln/channelmanager.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4065,7 +4065,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
40654065
#[cfg(any(test, feature = "fuzztarget", feature = "_test_utils"))]
40664066
pub fn get_and_clear_pending_events(&self) -> Vec<events::Event> {
40674067
let events = core::cell::RefCell::new(Vec::new());
4068-
let event_handler = |event| events.borrow_mut().push(event);
4068+
let event_handler = |event: &events::Event| events.borrow_mut().push(event.clone());
40694069
self.process_pending_events(&event_handler);
40704070
events.into_inner()
40714071
}
@@ -4139,7 +4139,7 @@ where
41394139
}
41404140

41414141
for event in pending_events.drain(..) {
4142-
handler.handle_event(event);
4142+
handler.handle_event(&event);
41434143
}
41444144

41454145
result

lightning/src/util/events.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -566,11 +566,11 @@ pub trait EventHandler {
566566
/// Handles the given [`Event`].
567567
///
568568
/// See [`EventsProvider`] for details that must be considered when implementing this method.
569-
fn handle_event(&self, event: Event);
569+
fn handle_event(&self, event: &Event);
570570
}
571571

572-
impl<F> EventHandler for F where F: Fn(Event) {
573-
fn handle_event(&self, event: Event) {
572+
impl<F> EventHandler for F where F: Fn(&Event) {
573+
fn handle_event(&self, event: &Event) {
574574
self(event)
575575
}
576576
}

0 commit comments

Comments
 (0)