Skip to content

Commit 9e0b7b2

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 9e0b7b2

File tree

1 file changed

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

1 file changed

+30
-7
lines changed

lightning/src/events/bump_transaction/sync.rs

Lines changed: 30 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,18 @@ 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 {
53+
self
54+
}
55+
}
56+
4657
impl<T: Deref> WalletSource for WalletSourceSyncWrapper<T>
4758
where
4859
T::Target: WalletSourceSync,
@@ -69,7 +80,7 @@ where
6980
W::Target: WalletSourceSync + MaybeSend,
7081
L::Target: Logger + MaybeSend,
7182
{
72-
wallet: Wallet<Arc<WalletSourceSyncWrapper<W>>, L>,
83+
wallet: Wallet<WalletSourceSyncWrapper<W>, L>,
7384
}
7485

7586
impl<W: Deref + MaybeSync + MaybeSend, L: Deref + MaybeSync + MaybeSend> WalletSync<W, L>
@@ -79,7 +90,7 @@ where
7990
{
8091
/// Constructs a new [`WalletSync`] instance.
8192
pub fn new(source: W, logger: L) -> Self {
82-
Self { wallet: Wallet::new(Arc::new(WalletSourceSyncWrapper(source)), logger) }
93+
Self { wallet: Wallet::new(WalletSourceSyncWrapper(source), logger) }
8394
}
8495
}
8596

@@ -140,6 +151,18 @@ struct CoinSelectionSourceSyncWrapper<T: Deref>(T)
140151
where
141152
T::Target: CoinSelectionSourceSync;
142153

154+
// Implement `Deref` directly on CoinSelectionSourceSyncWrapper so that it can be used directly
155+
// below, rather than via a wrapper.
156+
impl<T: Deref> Deref for CoinSelectionSourceSyncWrapper<T>
157+
where
158+
T::Target: CoinSelectionSourceSync,
159+
{
160+
type Target = Self;
161+
fn deref(&self) -> &Self {
162+
self
163+
}
164+
}
165+
143166
impl<T: Deref> CoinSelectionSource for CoinSelectionSourceSyncWrapper<T>
144167
where
145168
T::Target: CoinSelectionSourceSync,
@@ -172,7 +195,7 @@ where
172195
L::Target: Logger,
173196
{
174197
bump_transaction_event_handler:
175-
Arc<BumpTransactionEventHandler<B, Arc<CoinSelectionSourceSyncWrapper<C>>, SP, L>>,
198+
BumpTransactionEventHandler<B, CoinSelectionSourceSyncWrapper<C>, SP, L>,
176199
}
177200

178201
impl<B: Deref, C: Deref, SP: Deref, L: Deref> BumpTransactionEventHandlerSync<B, C, SP, L>
@@ -184,12 +207,12 @@ where
184207
{
185208
/// Constructs a new instance of [`BumpTransactionEventHandlerSync`].
186209
pub fn new(broadcaster: B, utxo_source: C, signer_provider: SP, logger: L) -> Self {
187-
let bump_transaction_event_handler = Arc::new(BumpTransactionEventHandler::new(
210+
let bump_transaction_event_handler = BumpTransactionEventHandler::new(
188211
broadcaster,
189-
Arc::new(CoinSelectionSourceSyncWrapper(utxo_source)),
212+
CoinSelectionSourceSyncWrapper(utxo_source),
190213
signer_provider,
191214
logger,
192-
));
215+
);
193216
Self { bump_transaction_event_handler }
194217
}
195218

0 commit comments

Comments
 (0)