Skip to content

Commit 711bd6e

Browse files
f - Make per_peer_state a FairRwLock
1 parent ab6735b commit 711bd6e

File tree

1 file changed

+36
-36
lines changed

1 file changed

+36
-36
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ use prelude::*;
6464
use core::{cmp, mem};
6565
use core::cell::RefCell;
6666
use io::Read;
67-
use sync::{Arc, Condvar, Mutex, MutexGuard, RwLock, RwLockReadGuard};
67+
use sync::{Arc, Condvar, Mutex, MutexGuard, RwLock, RwLockReadGuard, FairRwLock};
6868
use core::sync::atomic::{AtomicUsize, Ordering};
6969
use core::time::Duration;
7070
use core::ops::Deref;
@@ -791,9 +791,9 @@ pub struct ChannelManager<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref,
791791
///
792792
/// If also holding `channel_state` lock, must lock `channel_state` prior to `per_peer_state`.
793793
#[cfg(not(any(test, feature = "_test_utils")))]
794-
per_peer_state: RwLock<HashMap<PublicKey, Mutex<PeerState<Signer>>>>,
794+
per_peer_state: FairRwLock<HashMap<PublicKey, Mutex<PeerState<Signer>>>>,
795795
#[cfg(any(test, feature = "_test_utils"))]
796-
pub(super) per_peer_state: RwLock<HashMap<PublicKey, Mutex<PeerState<Signer>>>>,
796+
pub(super) per_peer_state: FairRwLock<HashMap<PublicKey, Mutex<PeerState<Signer>>>>,
797797

798798
pending_events: Mutex<Vec<events::Event>>,
799799
pending_background_events: Mutex<Vec<BackgroundEvent>>,
@@ -1631,7 +1631,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
16311631
last_node_announcement_serial: AtomicUsize::new(0),
16321632
highest_seen_timestamp: AtomicUsize::new(0),
16331633

1634-
per_peer_state: RwLock::new(HashMap::new()),
1634+
per_peer_state: FairRwLock::new(HashMap::new()),
16351635

16361636
pending_events: Mutex::new(Vec::new()),
16371637
pending_background_events: Mutex::new(Vec::new()),
@@ -1729,7 +1729,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
17291729

17301730
let temporary_channel_id = channel.channel_id();
17311731
let mut channel_state = self.channel_state.lock().unwrap();
1732-
let per_peer_state = self.per_peer_state.write().unwrap();
1732+
let per_peer_state = self.per_peer_state.read().unwrap();
17331733
if let Some(peer_state_mutex) = per_peer_state.get(&their_network_key){
17341734
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
17351735
let peer_state = &mut *peer_state_lock;
@@ -1867,7 +1867,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
18671867
let result: Result<(), _> = loop {
18681868
let mut channel_state_lock = self.channel_state.lock().unwrap();
18691869
let channel_state = &mut *channel_state_lock;
1870-
let per_peer_state = self.per_peer_state.write().unwrap();
1870+
let per_peer_state = self.per_peer_state.read().unwrap();
18711871
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
18721872
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
18731873
let peer_state = &mut *peer_state_lock;
@@ -1989,7 +1989,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
19891989
let mut chan = {
19901990
let mut channel_state_lock = self.channel_state.lock().unwrap();
19911991
let channel_state = &mut *channel_state_lock;
1992-
let per_peer_state = self.per_peer_state.write().unwrap();
1992+
let per_peer_state = self.per_peer_state.read().unwrap();
19931993
if let Some(peer_state_mutex) = per_peer_state.get(peer_node_id) {
19941994
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
19951995
let peer_state = &mut *peer_state_lock;
@@ -2499,7 +2499,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
24992499
}
25002500

25012501
let channel_state = &mut *channel_lock;
2502-
let per_peer_state = self.per_peer_state.write().unwrap();
2502+
let per_peer_state = self.per_peer_state.read().unwrap();
25032503
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id) {
25042504
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
25052505
let peer_state = &mut *peer_state_lock;
@@ -2846,7 +2846,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
28462846
) -> Result<(), APIError> {
28472847
let (chan, msg) = {
28482848
let (res, chan) = {
2849-
let per_peer_state = self.per_peer_state.write().unwrap();
2849+
let per_peer_state = self.per_peer_state.read().unwrap();
28502850
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
28512851
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
28522852
let peer_state = &mut *peer_state_lock;
@@ -2882,7 +2882,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
28822882
node_id: chan.get_counterparty_node_id(),
28832883
msg,
28842884
});
2885-
let per_peer_state = self.per_peer_state.write().unwrap();
2885+
let per_peer_state = self.per_peer_state.read().unwrap();
28862886
let chan_id = chan.channel_id();
28872887
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
28882888
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
@@ -3158,7 +3158,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
31583158
{
31593159
let mut channel_state_lock = self.channel_state.lock().unwrap();
31603160
let channel_state = &mut *channel_state_lock;
3161-
let per_peer_state = self.per_peer_state.write().unwrap();
3161+
let per_peer_state = self.per_peer_state.read().unwrap();
31623162

31633163
for (short_chan_id, mut pending_forwards) in channel_state.forward_htlcs.drain() {
31643164
if short_chan_id != 0 {
@@ -3873,7 +3873,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
38733873
HTLCSource::PreviousHopData(HTLCPreviousHopData { .. }) => {
38743874
let channel_state = self.channel_state.lock().unwrap();
38753875
let (failure_code, onion_failure_data) = {
3876-
let per_peer_state = self.per_peer_state.write().unwrap();
3876+
let per_peer_state = self.per_peer_state.read().unwrap();
38773877
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
38783878
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
38793879
let peer_state = &mut *peer_state_lock;
@@ -4247,7 +4247,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
42474247
}
42484248
};
42494249

4250-
let per_peer_state = self.per_peer_state.write().unwrap();
4250+
let per_peer_state = self.per_peer_state.read().unwrap();
42514251
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id) {
42524252
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
42534253
let peer_state = &mut *peer_state_lock;
@@ -4454,7 +4454,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
44544454
if counterparty_node_id.is_none() {
44554455
return
44564456
}
4457-
let per_peer_state = self.per_peer_state.write().unwrap();
4457+
let per_peer_state = self.per_peer_state.read().unwrap();
44584458
let mut peer_state_lock;
44594459
let mut channel = {
44604460
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id.unwrap()) {
@@ -4544,7 +4544,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
45444544

45454545
let mut channel_state_lock = self.channel_state.lock().unwrap();
45464546
let channel_state = &mut *channel_state_lock;
4547-
let per_peer_state = self.per_peer_state.write().unwrap();
4547+
let per_peer_state = self.per_peer_state.read().unwrap();
45484548
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
45494549
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
45504550
let peer_state = &mut *peer_state_lock;
@@ -4607,7 +4607,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
46074607
};
46084608
let mut channel_state_lock = self.channel_state.lock().unwrap();
46094609
let channel_state = &mut *channel_state_lock;
4610-
let per_peer_state = self.per_peer_state.write().unwrap();
4610+
let per_peer_state = self.per_peer_state.read().unwrap();
46114611
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
46124612
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
46134613
let peer_state = &mut *peer_state_lock;
@@ -4651,7 +4651,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
46514651
let (value, output_script, user_id) = {
46524652
let mut channel_lock = self.channel_state.lock().unwrap();
46534653
let channel_state = &mut *channel_lock;
4654-
let per_peer_state = self.per_peer_state.write().unwrap();
4654+
let per_peer_state = self.per_peer_state.read().unwrap();
46554655
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
46564656
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
46574657
let peer_state = &mut *peer_state_lock;
@@ -4685,7 +4685,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
46854685
let best_block = *self.best_block.read().unwrap();
46864686
let mut channel_lock = self.channel_state.lock().unwrap();
46874687
let channel_state = &mut *channel_lock;
4688-
let per_peer_state = self.per_peer_state.write().unwrap();
4688+
let per_peer_state = self.per_peer_state.read().unwrap();
46894689
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
46904690
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
46914691
let peer_state = &mut *peer_state_lock;
@@ -4769,7 +4769,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
47694769
let best_block = *self.best_block.read().unwrap();
47704770
let mut channel_lock = self.channel_state.lock().unwrap();
47714771
let channel_state = &mut *channel_lock;
4772-
let per_peer_state = self.per_peer_state.write().unwrap();
4772+
let per_peer_state = self.per_peer_state.read().unwrap();
47734773
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
47744774
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
47754775
let peer_state = &mut *peer_state_lock;
@@ -4813,7 +4813,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
48134813
fn internal_channel_ready(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReady) -> Result<(), MsgHandleErrInternal> {
48144814
let mut channel_state_lock = self.channel_state.lock().unwrap();
48154815
let channel_state = &mut *channel_state_lock;
4816-
let per_peer_state = self.per_peer_state.write().unwrap();
4816+
let per_peer_state = self.per_peer_state.read().unwrap();
48174817
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
48184818
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
48194819
let peer_state = &mut *peer_state_lock;
@@ -4859,7 +4859,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
48594859
let mut channel_state_lock = self.channel_state.lock().unwrap();
48604860
let channel_state = &mut *channel_state_lock;
48614861

4862-
let per_peer_state = self.per_peer_state.write().unwrap();
4862+
let per_peer_state = self.per_peer_state.read().unwrap();
48634863
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
48644864
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
48654865
let peer_state = &mut *peer_state_lock;
@@ -4917,7 +4917,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
49174917
let (tx, chan_option) = {
49184918
let mut channel_state_lock = self.channel_state.lock().unwrap();
49194919
let channel_state = &mut *channel_state_lock;
4920-
let per_peer_state = self.per_peer_state.write().unwrap();
4920+
let per_peer_state = self.per_peer_state.read().unwrap();
49214921
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
49224922
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
49234923
let peer_state = &mut *peer_state_lock;
@@ -4977,7 +4977,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
49774977
let (pending_forward_info, mut channel_state_lock) = self.decode_update_add_htlc_onion(msg);
49784978
let channel_state = &mut *channel_state_lock;
49794979

4980-
let per_peer_state = self.per_peer_state.write().unwrap();
4980+
let per_peer_state = self.per_peer_state.read().unwrap();
49814981
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
49824982
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
49834983
let peer_state = &mut *peer_state_lock;
@@ -5023,7 +5023,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
50235023
let mut channel_lock = self.channel_state.lock().unwrap();
50245024
let (htlc_source, forwarded_htlc_value) = {
50255025
let channel_state = &mut *channel_lock;
5026-
let per_peer_state = self.per_peer_state.write().unwrap();
5026+
let per_peer_state = self.per_peer_state.read().unwrap();
50275027
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
50285028
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
50295029
let peer_state = &mut *peer_state_lock;
@@ -5047,7 +5047,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
50475047
fn internal_update_fail_htlc(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateFailHTLC) -> Result<(), MsgHandleErrInternal> {
50485048
let mut channel_lock = self.channel_state.lock().unwrap();
50495049
let channel_state = &mut *channel_lock;
5050-
let per_peer_state = self.per_peer_state.write().unwrap();
5050+
let per_peer_state = self.per_peer_state.read().unwrap();
50515051
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
50525052
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
50535053
let peer_state = &mut *peer_state_lock;
@@ -5069,7 +5069,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
50695069
fn internal_update_fail_malformed_htlc(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateFailMalformedHTLC) -> Result<(), MsgHandleErrInternal> {
50705070
let mut channel_lock = self.channel_state.lock().unwrap();
50715071
let channel_state = &mut *channel_lock;
5072-
let per_peer_state = self.per_peer_state.write().unwrap();
5072+
let per_peer_state = self.per_peer_state.read().unwrap();
50735073
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
50745074
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
50755075
let peer_state = &mut *peer_state_lock;
@@ -5095,7 +5095,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
50955095
fn internal_commitment_signed(&self, counterparty_node_id: &PublicKey, msg: &msgs::CommitmentSigned) -> Result<(), MsgHandleErrInternal> {
50965096
let mut channel_state_lock = self.channel_state.lock().unwrap();
50975097
let channel_state = &mut *channel_state_lock;
5098-
let per_peer_state = self.per_peer_state.write().unwrap();
5098+
let per_peer_state = self.per_peer_state.read().unwrap();
50995099
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
51005100
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
51015101
let peer_state = &mut *peer_state_lock;
@@ -5187,7 +5187,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
51875187
let res = loop {
51885188
let mut channel_state_lock = self.channel_state.lock().unwrap();
51895189
let channel_state = &mut *channel_state_lock;
5190-
let per_peer_state = self.per_peer_state.write().unwrap();
5190+
let per_peer_state = self.per_peer_state.read().unwrap();
51915191
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
51925192
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
51935193
let peer_state = &mut *peer_state_lock;
@@ -5254,7 +5254,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
52545254
fn internal_update_fee(&self, counterparty_node_id: &PublicKey, msg: &msgs::UpdateFee) -> Result<(), MsgHandleErrInternal> {
52555255
let mut channel_lock = self.channel_state.lock().unwrap();
52565256
let channel_state = &mut *channel_lock;
5257-
let per_peer_state = self.per_peer_state.write().unwrap();
5257+
let per_peer_state = self.per_peer_state.read().unwrap();
52585258
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
52595259
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
52605260
let peer_state = &mut *peer_state_lock;
@@ -5277,7 +5277,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
52775277
let mut channel_state_lock = self.channel_state.lock().unwrap();
52785278
let channel_state = &mut *channel_state_lock;
52795279

5280-
let per_peer_state = self.per_peer_state.write().unwrap();
5280+
let per_peer_state = self.per_peer_state.read().unwrap();
52815281
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
52825282
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
52835283
let peer_state = &mut *peer_state_lock;
@@ -5317,7 +5317,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
53175317
return Ok(NotifyOption::SkipPersist)
53185318
}
53195319
};
5320-
let per_peer_state = self.per_peer_state.write().unwrap();
5320+
let per_peer_state = self.per_peer_state.read().unwrap();
53215321
if let Some(peer_state_mutex) = per_peer_state.get(chan_counterparty_node_id) {
53225322
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
53235323
let peer_state = &mut *peer_state_lock;
@@ -5352,7 +5352,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
53525352
let mut channel_state_lock = self.channel_state.lock().unwrap();
53535353
let channel_state = &mut *channel_state_lock;
53545354

5355-
let per_peer_state = self.per_peer_state.write().unwrap();
5355+
let per_peer_state = self.per_peer_state.read().unwrap();
53565356
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
53575357
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
53585358
let peer_state = &mut *peer_state_lock;
@@ -5435,7 +5435,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
54355435
id_to_peer.get(&funding_outpoint.to_channel_id()).cloned()
54365436
};
54375437
if let Some(counterparty_node_id) = counterparty_node_id_opt {
5438-
let per_peer_state = self.per_peer_state.write().unwrap();
5438+
let per_peer_state = self.per_peer_state.read().unwrap();
54395439
let pending_msg_events = &mut channel_state.pending_msg_events;
54405440
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id) {
54415441
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
@@ -6447,7 +6447,7 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
64476447
{
64486448
// First check if we can advance the channel type and try again.
64496449
let mut channel_state = self.channel_state.lock().unwrap();
6450-
let per_peer_state = self.per_peer_state.write().unwrap();
6450+
let per_peer_state = self.per_peer_state.read().unwrap();
64516451
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
64526452
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
64536453
let peer_state = &mut *peer_state_lock;
@@ -6901,7 +6901,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Writeable f
69016901
let channel_state = self.channel_state.lock().unwrap();
69026902
let mut htlc_purposes: Vec<&events::PaymentPurpose> = Vec::new();
69036903
{
6904-
let per_peer_state = self.per_peer_state.write().unwrap();
6904+
let per_peer_state = self.per_peer_state.read().unwrap();
69056905
let mut unfunded_channels = 0;
69066906
let mut number_of_channels = 0;
69076907
for (_, peer_state_mutex) in per_peer_state.iter() {
@@ -7573,7 +7573,7 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
75737573
last_node_announcement_serial: AtomicUsize::new(last_node_announcement_serial as usize),
75747574
highest_seen_timestamp: AtomicUsize::new(highest_seen_timestamp as usize),
75757575

7576-
per_peer_state: RwLock::new(per_peer_state),
7576+
per_peer_state: FairRwLock::new(per_peer_state),
75777577

75787578
pending_events: Mutex::new(pending_events_read),
75797579
pending_background_events: Mutex::new(pending_background_events_read),

0 commit comments

Comments
 (0)