Skip to content

Commit 5f7a934

Browse files
committed
Remove some unnecessary Arcs in our sync bump_transaction logic
Because LDK generally relies on traits passed via `Deref`, its tempting to just wrap implementations in `Arc` even when we don't otherwise need access to the implementation later. This does result in an unnecessary allocation, which is one-time and not a huge deal but irritates my OCD substantially. Here we drop the unnecessary `Arc` indirections in favor of simply implementing `Deref` directly on the sync wrappers used in `bump_transaction`.
1 parent e6c1494 commit 5f7a934

File tree

1 file changed

+20
-7
lines changed
  • lightning/src/events/bump_transaction

1 file changed

+20
-7
lines changed

lightning/src/events/bump_transaction/sync.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use crate::chain::chaininterface::BroadcasterInterface;
1717
use crate::chain::ClaimId;
1818
use crate::prelude::*;
1919
use crate::sign::SignerProvider;
20-
use crate::sync::Arc;
2120
use crate::util::async_poll::{dummy_waker, AsyncResult, MaybeSend, MaybeSync};
2221
use crate::util::logger::Logger;
2322

@@ -43,6 +42,13 @@ pub(crate) struct WalletSourceSyncWrapper<T: Deref>(T)
4342
where
4443
T::Target: WalletSourceSync;
4544

45+
// Implement `Deref` directly on WalletSourceSyncWrapper so that it can be used directly
46+
// below, rather than via a wrapper.
47+
impl<T: Deref> Deref for WalletSourceSyncWrapper<T> where T::Target: WalletSourceSync {
48+
type Target = Self;
49+
fn deref(&self) -> &Self { self }
50+
}
51+
4652
impl<T: Deref> WalletSource for WalletSourceSyncWrapper<T>
4753
where
4854
T::Target: WalletSourceSync,
@@ -69,7 +75,7 @@ where
6975
W::Target: WalletSourceSync + MaybeSend,
7076
L::Target: Logger + MaybeSend,
7177
{
72-
wallet: Wallet<Arc<WalletSourceSyncWrapper<W>>, L>,
78+
wallet: Wallet<WalletSourceSyncWrapper<W>, L>,
7379
}
7480

7581
impl<W: Deref + MaybeSync + MaybeSend, L: Deref + MaybeSync + MaybeSend> WalletSync<W, L>
@@ -79,7 +85,7 @@ where
7985
{
8086
/// Constructs a new [`WalletSync`] instance.
8187
pub fn new(source: W, logger: L) -> Self {
82-
Self { wallet: Wallet::new(Arc::new(WalletSourceSyncWrapper(source)), logger) }
88+
Self { wallet: Wallet::new(WalletSourceSyncWrapper(source), logger) }
8389
}
8490
}
8591

@@ -140,6 +146,13 @@ struct CoinSelectionSourceSyncWrapper<T: Deref>(T)
140146
where
141147
T::Target: CoinSelectionSourceSync;
142148

149+
// Implement `Deref` directly on CoinSelectionSourceSyncWrapper so that it can be used directly
150+
// below, rather than via a wrapper.
151+
impl<T: Deref> Deref for CoinSelectionSourceSyncWrapper<T> where T::Target: CoinSelectionSourceSync {
152+
type Target = Self;
153+
fn deref(&self) -> &Self { self }
154+
}
155+
143156
impl<T: Deref> CoinSelectionSource for CoinSelectionSourceSyncWrapper<T>
144157
where
145158
T::Target: CoinSelectionSourceSync,
@@ -172,7 +185,7 @@ where
172185
L::Target: Logger,
173186
{
174187
bump_transaction_event_handler:
175-
Arc<BumpTransactionEventHandler<B, Arc<CoinSelectionSourceSyncWrapper<C>>, SP, L>>,
188+
BumpTransactionEventHandler<B, CoinSelectionSourceSyncWrapper<C>, SP, L>,
176189
}
177190

178191
impl<B: Deref, C: Deref, SP: Deref, L: Deref> BumpTransactionEventHandlerSync<B, C, SP, L>
@@ -184,12 +197,12 @@ where
184197
{
185198
/// Constructs a new instance of [`BumpTransactionEventHandlerSync`].
186199
pub fn new(broadcaster: B, utxo_source: C, signer_provider: SP, logger: L) -> Self {
187-
let bump_transaction_event_handler = Arc::new(BumpTransactionEventHandler::new(
200+
let bump_transaction_event_handler = BumpTransactionEventHandler::new(
188201
broadcaster,
189-
Arc::new(CoinSelectionSourceSyncWrapper(utxo_source)),
202+
CoinSelectionSourceSyncWrapper(utxo_source),
190203
signer_provider,
191204
logger,
192-
));
205+
);
193206
Self { bump_transaction_event_handler }
194207
}
195208

0 commit comments

Comments
 (0)