Skip to content

Commit 87328f7

Browse files
committed
Fix type restrained to only MutexGuard
1 parent 0f2c4c0 commit 87328f7

File tree

5 files changed

+65
-29
lines changed

5 files changed

+65
-29
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ mod tests {
859859
use lightning::ln::peer_handler::{PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler};
860860
use lightning::routing::gossip::{NetworkGraph, NodeId, P2PGossipSync};
861861
use lightning::routing::router::{DefaultRouter, Path, RouteHop};
862-
use lightning::routing::scoring::{ChannelUsage, Score};
862+
use lightning::routing::scoring::{ChannelUsage, Score, LockableScore};
863863
use lightning::util::config::UserConfig;
864864
use lightning::util::ser::Writeable;
865865
use lightning::util::test_utils;
@@ -868,7 +868,7 @@ mod tests {
868868
use std::collections::VecDeque;
869869
use std::{fs, env};
870870
use std::path::PathBuf;
871-
use std::sync::{Arc, Mutex};
871+
use std::sync::{Arc, Mutex, MutexGuard};
872872
use std::sync::mpsc::SyncSender;
873873
use std::time::Duration;
874874
use lightning_rapid_gossip_sync::RapidGossipSync;
@@ -886,15 +886,31 @@ mod tests {
886886
fn disconnect_socket(&mut self) {}
887887
}
888888

889-
type ChannelManager = channelmanager::ChannelManager<Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<KeysManager>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<DefaultRouter<Arc<NetworkGraph<Arc<test_utils::TestLogger>>>, Arc<test_utils::TestLogger>, Arc<Mutex<TestScorer>>, (), TestScorer>>, Arc<test_utils::TestLogger>>;
889+
type ChannelManager<'a> =
890+
channelmanager::ChannelManager<
891+
Arc<ChainMonitor>,
892+
Arc<test_utils::TestBroadcaster>,
893+
Arc<KeysManager>,
894+
Arc<KeysManager>,
895+
Arc<KeysManager>,
896+
Arc<test_utils::TestFeeEstimator>,
897+
Arc<DefaultRouter<
898+
Arc<NetworkGraph<Arc<test_utils::TestLogger>>>,
899+
Arc<test_utils::TestLogger>,
900+
MutexGuard<'a, TestScorer>,
901+
Arc<Mutex<TestScorer>>,
902+
(),
903+
TestScorer>
904+
>,
905+
Arc<test_utils::TestLogger>>;
890906

891907
type ChainMonitor = chainmonitor::ChainMonitor<InMemorySigner, Arc<test_utils::TestChainSource>, Arc<test_utils::TestBroadcaster>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>, Arc<FilesystemPersister>>;
892908

893909
type PGS = Arc<P2PGossipSync<Arc<NetworkGraph<Arc<test_utils::TestLogger>>>, Arc<test_utils::TestChainSource>, Arc<test_utils::TestLogger>>>;
894910
type RGS = Arc<RapidGossipSync<Arc<NetworkGraph<Arc<test_utils::TestLogger>>>, Arc<test_utils::TestLogger>>>;
895911

896912
struct Node {
897-
node: Arc<ChannelManager>,
913+
node: Arc<ChannelManager<'static>>,
898914
p2p_gossip_sync: PGS,
899915
rapid_gossip_sync: RGS,
900916
peer_manager: Arc<PeerManager<TestDescriptor, Arc<test_utils::TestChannelMessageHandler>, Arc<test_utils::TestRoutingMessageHandler>, IgnoringMessageHandler, Arc<test_utils::TestLogger>, IgnoringMessageHandler, Arc<KeysManager>>>,
@@ -921,7 +937,7 @@ mod tests {
921937
}
922938
}
923939

924-
impl Drop for Node {
940+
impl<'a> Drop for Node<'a> {
925941
fn drop(&mut self) {
926942
let data_dir = self.persister.get_data_dir();
927943
match fs::remove_dir_all(data_dir.clone()) {

lightning/src/ln/channelmanager.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ use crate::prelude::*;
7171
use core::{cmp, mem};
7272
use core::cell::RefCell;
7373
use crate::io::Read;
74-
use crate::sync::{Arc, Mutex, RwLock, RwLockReadGuard, FairRwLock, LockTestExt, LockHeldState};
74+
use crate::sync::{Arc, Mutex, MutexGuard, RwLock, RwLockReadGuard, FairRwLock, LockTestExt, LockHeldState};
7575
use core::sync::atomic::{AtomicUsize, AtomicBool, Ordering};
7676
use core::time::Duration;
7777
use core::ops::Deref;
@@ -724,7 +724,7 @@ struct PendingInboundPayment {
724724
/// of [`KeysManager`] and [`DefaultRouter`].
725725
///
726726
/// This is not exported to bindings users as Arcs don't make sense in bindings
727-
pub type SimpleArcChannelManager<M, T, F, L> = ChannelManager<
727+
pub type SimpleArcChannelManager<'a, M, T, F, L> = ChannelManager<
728728
Arc<M>,
729729
Arc<T>,
730730
Arc<KeysManager>,
@@ -734,7 +734,8 @@ pub type SimpleArcChannelManager<M, T, F, L> = ChannelManager<
734734
Arc<DefaultRouter<
735735
Arc<NetworkGraph<Arc<L>>>,
736736
Arc<L>,
737-
Arc<Mutex<ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>>,
737+
MutexGuard<'a, ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>,
738+
Arc<ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>,
738739
ProbabilisticScoringFeeParameters,
739740
ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>,
740741
>>,
@@ -752,7 +753,23 @@ pub type SimpleArcChannelManager<M, T, F, L> = ChannelManager<
752753
/// of [`KeysManager`] and [`DefaultRouter`].
753754
///
754755
/// This is not exported to bindings users as Arcs don't make sense in bindings
755-
pub type SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L> = ChannelManager<&'a M, &'b T, &'c KeysManager, &'c KeysManager, &'c KeysManager, &'d F, &'e DefaultRouter<&'f NetworkGraph<&'g L>, &'g L, &'h Mutex<ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>>, ProbabilisticScoringFeeParameters, ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>>, &'g L>;
756+
pub type SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L> =
757+
ChannelManager<
758+
&'a M,
759+
&'b T,
760+
&'c KeysManager,
761+
&'c KeysManager,
762+
&'c KeysManager,
763+
&'d F,
764+
&'e DefaultRouter<
765+
&'f NetworkGraph<&'g L>,
766+
&'g L,
767+
&'h MutexGuard<'h, ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>>,
768+
&'h ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>,
769+
ProbabilisticScoringFeeParameters,
770+
ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>
771+
>,
772+
&'g L>;
756773

757774
macro_rules! define_test_pub_trait { ($vis: vis) => {
758775
/// A trivial trait which describes any [`ChannelManager`] used in testing.

lightning/src/ln/peer_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -607,9 +607,9 @@ impl Peer {
607607
/// issues such as overly long function definitions.
608608
///
609609
/// This is not exported to bindings users as `Arc`s don't make sense in bindings.
610-
pub type SimpleArcPeerManager<SD, M, T, F, C, L, R> = PeerManager<
610+
pub type SimpleArcPeerManager<'a, SD, M, T, F, C, L, R> = PeerManager<
611611
SD,
612-
Arc<SimpleArcChannelManager<M, T, F, L>>,
612+
Arc<SimpleArcChannelManager<'a, M, T, F, L>>,
613613
Arc<P2PGossipSync<Arc<NetworkGraph<Arc<L>>>, Arc<C>, Arc<L>>>,
614614
Arc<SimpleArcOnionMessenger<L, R>>,
615615
Arc<L>,

lightning/src/routing/router.rs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@ use crate::util::chacha20::ChaCha20;
2727

2828
use crate::io;
2929
use crate::prelude::*;
30-
use crate::sync::{Mutex, MutexGuard};
30+
use crate::sync::{Mutex};
3131
use alloc::collections::BinaryHeap;
3232
use core::{cmp, fmt};
33-
use core::ops::Deref;
33+
use core::ops::{Deref,DerefMut};
3434

3535
/// A [`Router`] implemented using [`find_route`].
36-
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Score<ScoreParams = SP>> where
36+
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, D: Sized, S: Deref, SP: Sized, Sc: Score<ScoreParams = SP>> where
3737
L::Target: Logger,
38-
S::Target: for <'a> LockableScore<'a, Locked = MutexGuard<'a, Sc>>,
38+
for<'a> D: 'a + DerefMut<Target = Sc>,
39+
S::Target: for <'a> LockableScore<'a, Locked = D>,
3940
{
4041
network_graph: G,
4142
logger: L,
@@ -44,9 +45,10 @@ pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref,
4445
score_params: SP
4546
}
4647

47-
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Score<ScoreParams = SP>> DefaultRouter<G, L, S, SP, Sc> where
48+
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, D: Sized, SP: Sized, Sc: Score<ScoreParams = SP>> DefaultRouter<G, L, D, S, SP, Sc> where
4849
L::Target: Logger,
49-
S::Target: for <'a> LockableScore<'a, Locked = MutexGuard<'a, Sc>>,
50+
S::Target: for <'a> LockableScore<'a, Locked = D>,
51+
for<'a> D: 'a + DerefMut<Target = Sc>,
5052
{
5153
/// Creates a new router.
5254
pub fn new(network_graph: G, logger: L, random_seed_bytes: [u8; 32], scorer: S, score_params: SP) -> Self {
@@ -55,9 +57,10 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Scor
5557
}
5658
}
5759

58-
impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Score<ScoreParams = SP>> Router for DefaultRouter<G, L, S, SP, Sc> where
60+
impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, D: Sized, S: Deref, SP: Sized, Sc: Score<ScoreParams = SP>> Router for DefaultRouter<G, L, D, S, SP, Sc> where
5961
L::Target: Logger,
60-
S::Target: for <'a> LockableScore<'a, Locked = MutexGuard<'a, Sc>>,
62+
S::Target: for <'a> LockableScore<'a, Locked = D>,
63+
for<'a> D: 'a + DerefMut<Target = Sc>,
6164
{
6265
fn find_route(
6366
&self,
@@ -73,7 +76,7 @@ impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Sc
7376
};
7477
find_route(
7578
payer, params, &self.network_graph, first_hops, &*self.logger,
76-
&ScorerAccountingForInFlightHtlcs::new(self.scorer.lock(), inflight_htlcs),
79+
&ScorerAccountingForInFlightHtlcs::new(self.scorer.lock().deref_mut(), inflight_htlcs),
7780
&self.score_params,
7881
&random_seed_bytes
7982
)
@@ -104,15 +107,15 @@ pub trait Router {
104107
/// [`find_route`].
105108
///
106109
/// [`Score`]: crate::routing::scoring::Score
107-
pub struct ScorerAccountingForInFlightHtlcs<'a, S: Score> {
108-
scorer: S,
110+
pub struct ScorerAccountingForInFlightHtlcs<'a, S:Score<ScoreParams = SP>, SP: Sized> {
111+
scorer: &'a mut S,
109112
// Maps a channel's short channel id and its direction to the liquidity used up.
110113
inflight_htlcs: &'a InFlightHtlcs,
111114
}
112115

113-
impl<'a, S: Score> ScorerAccountingForInFlightHtlcs<'a, S> {
116+
impl<'a, S:Score<ScoreParams = SP>, SP: Sized> ScorerAccountingForInFlightHtlcs<'a, S, SP> {
114117
/// Initialize a new `ScorerAccountingForInFlightHtlcs`.
115-
pub fn new(scorer: S, inflight_htlcs: &'a InFlightHtlcs) -> Self {
118+
pub fn new(scorer: &'a mut S, inflight_htlcs: &'a InFlightHtlcs) -> Self {
116119
ScorerAccountingForInFlightHtlcs {
117120
scorer,
118121
inflight_htlcs
@@ -125,7 +128,7 @@ impl<'a, S: Score> Writeable for ScorerAccountingForInFlightHtlcs<'a, S> {
125128
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> { self.scorer.write(writer) }
126129
}
127130

128-
impl<'a, S: Score> Score for ScorerAccountingForInFlightHtlcs<'a, S> {
131+
impl<'a, S:Score<ScoreParams = SP>, SP: Sized> Score for ScorerAccountingForInFlightHtlcs<'a, S, SP> {
129132
type ScoreParams = S::ScoreParams;
130133
fn channel_penalty_msat(&self, short_channel_id: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage, score_params: &Self::ScoreParams) -> u64 {
131134
if let Some(used_liquidity) = self.inflight_htlcs.used_liquidity_msat(

lightning/src/util/test_utils.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ use regex;
5151
use crate::io;
5252
use crate::prelude::*;
5353
use core::cell::RefCell;
54+
use core::ops::DerefMut;
5455
use core::time::Duration;
5556
use crate::sync::{Mutex, Arc};
5657
use core::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
@@ -113,8 +114,8 @@ impl<'a> Router for TestRouter<'a> {
113114
if let Some((find_route_query, find_route_res)) = self.next_routes.lock().unwrap().pop_front() {
114115
assert_eq!(find_route_query, *params);
115116
if let Ok(ref route) = find_route_res {
116-
let locked_scorer = self.scorer.lock().unwrap();
117-
let scorer = ScorerAccountingForInFlightHtlcs::new(locked_scorer, inflight_htlcs);
117+
let mut binding = self.scorer.lock().unwrap();
118+
let scorer = ScorerAccountingForInFlightHtlcs::new(binding.deref_mut(), inflight_htlcs);
118119
for path in &route.paths {
119120
let mut aggregate_msat = 0u64;
120121
for (idx, hop) in path.hops.iter().rev().enumerate() {
@@ -139,10 +140,9 @@ impl<'a> Router for TestRouter<'a> {
139140
return find_route_res;
140141
}
141142
let logger = TestLogger::new();
142-
let scorer = self.scorer.lock().unwrap();
143143
find_route(
144144
payer, params, &self.network_graph, first_hops, &logger,
145-
&ScorerAccountingForInFlightHtlcs::new(scorer, &inflight_htlcs), &(),
145+
&ScorerAccountingForInFlightHtlcs::new(self.scorer.lock().unwrap().deref_mut(), &inflight_htlcs), &(),
146146
&[42; 32]
147147
)
148148
}

0 commit comments

Comments
 (0)