Skip to content

Commit d698898

Browse files
authored
Merge pull request #1729 from TheBlueMatt/2022-09-lockablescore-bindings
Add a `MutexGuard` wrapper for the bindings-only `LockableScore`
2 parents 18ac915 + 56b07e5 commit d698898

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

lightning/src/routing/scoring.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,39 @@ pub struct MultiThreadedLockableScore<S: Score> {
188188
score: Mutex<S>,
189189
}
190190
#[cfg(c_bindings)]
191-
/// (C-not exported)
191+
/// A locked `MultiThreadedLockableScore`.
192+
pub struct MultiThreadedLockableScoreLock<'a, S: Score>(MutexGuard<'a, S>);
193+
#[cfg(c_bindings)]
194+
impl<'a, T: Score + 'a> Score for MultiThreadedLockableScoreLock<'a, T> {
195+
fn channel_penalty_msat(&self, scid: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage) -> u64 {
196+
self.0.channel_penalty_msat(scid, source, target, usage)
197+
}
198+
fn payment_path_failed(&mut self, path: &[&RouteHop], short_channel_id: u64) {
199+
self.0.payment_path_failed(path, short_channel_id)
200+
}
201+
fn payment_path_successful(&mut self, path: &[&RouteHop]) {
202+
self.0.payment_path_successful(path)
203+
}
204+
fn probe_failed(&mut self, path: &[&RouteHop], short_channel_id: u64) {
205+
self.0.probe_failed(path, short_channel_id)
206+
}
207+
fn probe_successful(&mut self, path: &[&RouteHop]) {
208+
self.0.probe_successful(path)
209+
}
210+
}
211+
#[cfg(c_bindings)]
212+
impl<'a, T: Score + 'a> Writeable for MultiThreadedLockableScoreLock<'a, T> {
213+
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
214+
self.0.write(writer)
215+
}
216+
}
217+
218+
#[cfg(c_bindings)]
192219
impl<'a, T: Score + 'a> LockableScore<'a> for MultiThreadedLockableScore<T> {
193-
type Locked = MutexGuard<'a, T>;
220+
type Locked = MultiThreadedLockableScoreLock<'a, T>;
194221

195-
fn lock(&'a self) -> MutexGuard<'a, T> {
196-
Mutex::lock(&self.score).unwrap()
222+
fn lock(&'a self) -> MultiThreadedLockableScoreLock<'a, T> {
223+
MultiThreadedLockableScoreLock(Mutex::lock(&self.score).unwrap())
197224
}
198225
}
199226

0 commit comments

Comments
 (0)