Skip to content

Commit 2fc13d1

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 2fc13d1

File tree

1 file changed

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

1 file changed

+26
-7
lines changed

lightning/src/events/bump_transaction/sync.rs

Lines changed: 26 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,16 @@ 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>
48+
where
49+
T::Target: WalletSourceSync,
50+
{
51+
type Target = Self;
52+
fn deref(&self) -> &Self { self }
53+
}
54+
4655
impl<T: Deref> WalletSource for WalletSourceSyncWrapper<T>
4756
where
4857
T::Target: WalletSourceSync,
@@ -69,7 +78,7 @@ where
6978
W::Target: WalletSourceSync + MaybeSend,
7079
L::Target: Logger + MaybeSend,
7180
{
72-
wallet: Wallet<Arc<WalletSourceSyncWrapper<W>>, L>,
81+
wallet: Wallet<WalletSourceSyncWrapper<W>, L>,
7382
}
7483

7584
impl<W: Deref + MaybeSync + MaybeSend, L: Deref + MaybeSync + MaybeSend> WalletSync<W, L>
@@ -79,7 +88,7 @@ where
7988
{
8089
/// Constructs a new [`WalletSync`] instance.
8190
pub fn new(source: W, logger: L) -> Self {
82-
Self { wallet: Wallet::new(Arc::new(WalletSourceSyncWrapper(source)), logger) }
91+
Self { wallet: Wallet::new(WalletSourceSyncWrapper(source), logger) }
8392
}
8493
}
8594

@@ -140,6 +149,16 @@ struct CoinSelectionSourceSyncWrapper<T: Deref>(T)
140149
where
141150
T::Target: CoinSelectionSourceSync;
142151

152+
// Implement `Deref` directly on CoinSelectionSourceSyncWrapper so that it can be used directly
153+
// below, rather than via a wrapper.
154+
impl<T: Deref> Deref for CoinSelectionSourceSyncWrapper<T>
155+
where
156+
T::Target: CoinSelectionSourceSync,
157+
{
158+
type Target = Self;
159+
fn deref(&self) -> &Self { self }
160+
}
161+
143162
impl<T: Deref> CoinSelectionSource for CoinSelectionSourceSyncWrapper<T>
144163
where
145164
T::Target: CoinSelectionSourceSync,
@@ -172,7 +191,7 @@ where
172191
L::Target: Logger,
173192
{
174193
bump_transaction_event_handler:
175-
Arc<BumpTransactionEventHandler<B, Arc<CoinSelectionSourceSyncWrapper<C>>, SP, L>>,
194+
BumpTransactionEventHandler<B, CoinSelectionSourceSyncWrapper<C>, SP, L>,
176195
}
177196

178197
impl<B: Deref, C: Deref, SP: Deref, L: Deref> BumpTransactionEventHandlerSync<B, C, SP, L>
@@ -184,12 +203,12 @@ where
184203
{
185204
/// Constructs a new instance of [`BumpTransactionEventHandlerSync`].
186205
pub fn new(broadcaster: B, utxo_source: C, signer_provider: SP, logger: L) -> Self {
187-
let bump_transaction_event_handler = Arc::new(BumpTransactionEventHandler::new(
206+
let bump_transaction_event_handler = BumpTransactionEventHandler::new(
188207
broadcaster,
189-
Arc::new(CoinSelectionSourceSyncWrapper(utxo_source)),
208+
CoinSelectionSourceSyncWrapper(utxo_source),
190209
signer_provider,
191210
logger,
192-
));
211+
);
193212
Self { bump_transaction_event_handler }
194213
}
195214

0 commit comments

Comments
 (0)