Skip to content

Commit a938fec

Browse files
authored
Merge pull request #2632 from TheBlueMatt/2023-09-writeable-rwlock
Implement Readable/Writeable for RwLock wrappers
2 parents 9b1b724 + 783e255 commit a938fec

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ use core::task;
501501
/// could setup `process_events_async` like this:
502502
/// ```
503503
/// # use lightning::io;
504-
/// # use std::sync::{Arc, Mutex};
504+
/// # use std::sync::{Arc, RwLock};
505505
/// # use std::sync::atomic::{AtomicBool, Ordering};
506506
/// # use lightning_background_processor::{process_events_async, GossipSync};
507507
/// # struct MyStore {}
@@ -532,7 +532,7 @@ use core::task;
532532
/// # type MyNetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<MyLogger>>;
533533
/// # type MyGossipSync = lightning::routing::gossip::P2PGossipSync<Arc<MyNetworkGraph>, Arc<MyUtxoLookup>, Arc<MyLogger>>;
534534
/// # type MyChannelManager = lightning::ln::channelmanager::SimpleArcChannelManager<MyChainMonitor, MyBroadcaster, MyFeeEstimator, MyLogger>;
535-
/// # type MyScorer = Mutex<lightning::routing::scoring::ProbabilisticScorer<Arc<MyNetworkGraph>, Arc<MyLogger>>>;
535+
/// # type MyScorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<MyNetworkGraph>, Arc<MyLogger>>>;
536536
///
537537
/// # async fn setup_background_processing(my_persister: Arc<MyStore>, my_event_handler: Arc<MyEventHandler>, my_chain_monitor: Arc<MyChainMonitor>, my_channel_manager: Arc<MyChannelManager>, my_gossip_sync: Arc<MyGossipSync>, my_logger: Arc<MyLogger>, my_scorer: Arc<MyScorer>, my_peer_manager: Arc<MyPeerManager>) {
538538
/// let background_persister = Arc::clone(&my_persister);

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,7 @@ pub type SimpleArcChannelManager<M, T, F, L> = ChannelManager<
803803
Arc<DefaultRouter<
804804
Arc<NetworkGraph<Arc<L>>>,
805805
Arc<L>,
806-
Arc<Mutex<ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>>,
806+
Arc<RwLock<ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>>,
807807
ProbabilisticScoringFeeParameters,
808808
ProbabilisticScorer<Arc<NetworkGraph<Arc<L>>>, Arc<L>>,
809809
>>,
@@ -832,7 +832,7 @@ pub type SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L> =
832832
&'e DefaultRouter<
833833
&'f NetworkGraph<&'g L>,
834834
&'g L,
835-
&'h Mutex<ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>>,
835+
&'h RwLock<ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>>,
836836
ProbabilisticScoringFeeParameters,
837837
ProbabilisticScorer<&'f NetworkGraph<&'g L>, &'g L>
838838
>,

lightning/src/util/ser.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::prelude::*;
1717
use crate::io::{self, Read, Seek, Write};
1818
use crate::io_extras::{copy, sink};
1919
use core::hash::Hash;
20-
use crate::sync::Mutex;
20+
use crate::sync::{Mutex, RwLock};
2121
use core::cmp;
2222
use core::convert::TryFrom;
2323
use core::ops::Deref;
@@ -1195,6 +1195,18 @@ impl<T: Writeable> Writeable for Mutex<T> {
11951195
}
11961196
}
11971197

1198+
impl<T: Readable> Readable for RwLock<T> {
1199+
fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
1200+
let t: T = Readable::read(r)?;
1201+
Ok(RwLock::new(t))
1202+
}
1203+
}
1204+
impl<T: Writeable> Writeable for RwLock<T> {
1205+
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
1206+
self.read().unwrap().write(w)
1207+
}
1208+
}
1209+
11981210
impl<A: Readable, B: Readable> Readable for (A, B) {
11991211
fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
12001212
let a: A = Readable::read(r)?;

0 commit comments

Comments
 (0)