Skip to content

Commit e8ea0d9

Browse files
committed
Implement chain::Listen without using RefCell
The implementation of chain::Listen for ChannelMonitor required using a RefCell since its block_connected method required a mutable borrow. This is no longer the case since ChannelMonitor now uses interior mutability via a Mutex. So the RefCell is no longer needed.
1 parent 389c4ad commit e8ea0d9

File tree

2 files changed

+5
-7
lines changed

2 files changed

+5
-7
lines changed

lightning-block-sync/src/init.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ use lightning::chain;
3838
///
3939
/// use lightning_block_sync::*;
4040
///
41-
/// use std::cell::RefCell;
4241
/// use std::io::Cursor;
4342
///
4443
/// async fn init_sync<
@@ -83,7 +82,7 @@ use lightning::chain;
8382
///
8483
/// // Synchronize any channel monitors and the channel manager to be on the best block.
8584
/// let mut cache = UnboundedCache::new();
86-
/// let mut monitor_listener = (RefCell::new(monitor), &*tx_broadcaster, &*fee_estimator, &*logger);
85+
/// let mut monitor_listener = (monitor, &*tx_broadcaster, &*fee_estimator, &*logger);
8786
/// let listeners = vec![
8887
/// (monitor_block_hash, &mut monitor_listener as &mut dyn chain::Listen),
8988
/// (manager_block_hash, &mut manager as &mut dyn chain::Listen),
@@ -92,7 +91,7 @@ use lightning::chain;
9291
/// block_source, Network::Bitcoin, &mut cache, listeners).await.unwrap();
9392
///
9493
/// // Allow the chain monitor to watch any channels.
95-
/// let monitor = monitor_listener.0.into_inner();
94+
/// let monitor = monitor_listener.0;
9695
/// chain_monitor.watch_channel(monitor.get_funding_txo().0, monitor);
9796
///
9897
/// // Create an SPV client to notify the chain monitor and channel manager of block events.

lightning/src/chain/channelmonitor.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ use util::ser::{Readable, ReadableArgs, MaybeReadable, Writer, Writeable, U48};
5050
use util::byte_utils;
5151
use util::events::Event;
5252

53-
use std::cell::RefCell;
5453
use std::collections::{HashMap, HashSet, hash_map};
5554
use std::{cmp, mem};
5655
use std::io::Error;
@@ -2474,19 +2473,19 @@ pub trait Persist<ChannelSigner: Sign>: Send + Sync {
24742473
fn update_persisted_channel(&self, id: OutPoint, update: &ChannelMonitorUpdate, data: &ChannelMonitor<ChannelSigner>) -> Result<(), ChannelMonitorUpdateErr>;
24752474
}
24762475

2477-
impl<Signer: Sign, T: Deref, F: Deref, L: Deref> chain::Listen for (RefCell<ChannelMonitor<Signer>>, T, F, L)
2476+
impl<Signer: Sign, T: Deref, F: Deref, L: Deref> chain::Listen for (ChannelMonitor<Signer>, T, F, L)
24782477
where
24792478
T::Target: BroadcasterInterface,
24802479
F::Target: FeeEstimator,
24812480
L::Target: Logger,
24822481
{
24832482
fn block_connected(&self, block: &Block, height: u32) {
24842483
let txdata: Vec<_> = block.txdata.iter().enumerate().collect();
2485-
self.0.borrow_mut().block_connected(&block.header, &txdata, height, &*self.1, &*self.2, &*self.3);
2484+
self.0.block_connected(&block.header, &txdata, height, &*self.1, &*self.2, &*self.3);
24862485
}
24872486

24882487
fn block_disconnected(&self, header: &BlockHeader, height: u32) {
2489-
self.0.borrow_mut().block_disconnected(header, height, &*self.1, &*self.2, &*self.3);
2488+
self.0.block_disconnected(header, height, &*self.1, &*self.2, &*self.3);
24902489
}
24912490
}
24922491

0 commit comments

Comments
 (0)