Skip to content

Commit 89ad41a

Browse files
committed
Fix type restrained to only MutexGuard
1 parent 0f2c4c0 commit 89ad41a

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

lightning/src/routing/router.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ 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`].
3636
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, 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+
S::Target: for <'a> LockableScore<'a, Locked = 'a + DerefMut<Target = Sc>>,
3939
{
4040
network_graph: G,
4141
logger: L,
@@ -46,7 +46,7 @@ pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref,
4646

4747
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Score<ScoreParams = SP>> DefaultRouter<G, L, S, SP, Sc> where
4848
L::Target: Logger,
49-
S::Target: for <'a> LockableScore<'a, Locked = MutexGuard<'a, Sc>>,
49+
S::Target: for <'a> LockableScore<'a, Locked = 'a + DerefMut<Target = Sc>>,
5050
{
5151
/// Creates a new router.
5252
pub fn new(network_graph: G, logger: L, random_seed_bytes: [u8; 32], scorer: S, score_params: SP) -> Self {
@@ -57,7 +57,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Scor
5757

5858
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
5959
L::Target: Logger,
60-
S::Target: for <'a> LockableScore<'a, Locked = MutexGuard<'a, Sc>>,
60+
S::Target: for <'a> LockableScore<'a, Locked = 'a + DerefMut<Target = Sc>>,
6161
{
6262
fn find_route(
6363
&self,
@@ -71,9 +71,10 @@ impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Sc
7171
*locked_random_seed_bytes = Sha256::hash(&*locked_random_seed_bytes).into_inner();
7272
*locked_random_seed_bytes
7373
};
74+
let scorer: Box<dyn DerefMut<Target = Sc>> = Box::new(self.scorer.lock());
7475
find_route(
7576
payer, params, &self.network_graph, first_hops, &*self.logger,
76-
&ScorerAccountingForInFlightHtlcs::new(self.scorer.lock(), inflight_htlcs),
77+
&ScorerAccountingForInFlightHtlcs::new(scorer, inflight_htlcs),
7778
&self.score_params,
7879
&random_seed_bytes
7980
)
@@ -104,15 +105,15 @@ pub trait Router {
104105
/// [`find_route`].
105106
///
106107
/// [`Score`]: crate::routing::scoring::Score
107-
pub struct ScorerAccountingForInFlightHtlcs<'a, S: Score> {
108-
scorer: S,
108+
pub struct ScorerAccountingForInFlightHtlcs<'a, S:Score<ScoreParams = SP>, SP: Sized> {
109+
scorer: Box<dyn DerefMut<Target = S>>,
109110
// Maps a channel's short channel id and its direction to the liquidity used up.
110111
inflight_htlcs: &'a InFlightHtlcs,
111112
}
112113

113-
impl<'a, S: Score> ScorerAccountingForInFlightHtlcs<'a, S> {
114+
impl<'a, S:Score<ScoreParams = SP>, SP: Sized> ScorerAccountingForInFlightHtlcs<'a, S, SP> {
114115
/// Initialize a new `ScorerAccountingForInFlightHtlcs`.
115-
pub fn new(scorer: S, inflight_htlcs: &'a InFlightHtlcs) -> Self {
116+
pub fn new(scorer: Box<dyn DerefMut<Target = S>>, inflight_htlcs: &'a InFlightHtlcs) -> Self {
116117
ScorerAccountingForInFlightHtlcs {
117118
scorer,
118119
inflight_htlcs
@@ -125,7 +126,7 @@ impl<'a, S: Score> Writeable for ScorerAccountingForInFlightHtlcs<'a, S> {
125126
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> { self.scorer.write(writer) }
126127
}
127128

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

lightning/src/util/test_utils.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ 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;
55-
use crate::sync::{Mutex, Arc};
56+
use crate::sync::{Mutex, Arc, MutexGuard};
5657
use core::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
5758
use core::mem;
5859
use bitcoin::bech32::u5;
@@ -114,7 +115,7 @@ impl<'a> Router for TestRouter<'a> {
114115
assert_eq!(find_route_query, *params);
115116
if let Ok(ref route) = find_route_res {
116117
let locked_scorer = self.scorer.lock().unwrap();
117-
let scorer = ScorerAccountingForInFlightHtlcs::new(locked_scorer, inflight_htlcs);
118+
let scorer = ScorerAccountingForInFlightHtlcs::new(Box::new(locked_scorer), inflight_htlcs);
118119
for path in &route.paths {
119120
let mut aggregate_msat = 0u64;
120121
for (idx, hop) in path.hops.iter().rev().enumerate() {
@@ -142,7 +143,7 @@ impl<'a> Router for TestRouter<'a> {
142143
let scorer = self.scorer.lock().unwrap();
143144
find_route(
144145
payer, params, &self.network_graph, first_hops, &logger,
145-
&ScorerAccountingForInFlightHtlcs::new(scorer, &inflight_htlcs), &(),
146+
&ScorerAccountingForInFlightHtlcs::new(Box::new(scorer), &inflight_htlcs), &(),
146147
&[42; 32]
147148
)
148149
}

0 commit comments

Comments
 (0)