@@ -1980,7 +1980,8 @@ macro_rules! handle_error {
1980
1980
match $internal {
1981
1981
Ok(msg) => Ok(msg),
1982
1982
Err(MsgHandleErrInternal { err, shutdown_finish, .. }) => {
1983
- let mut msg_events = Vec::with_capacity(2);
1983
+ let mut msg_events = Vec::with_capacity(1);
1984
+ let mut broadcast_events = Vec::with_capacity(1);
1984
1985
1985
1986
if let Some((shutdown_res, update_option)) = shutdown_finish {
1986
1987
let counterparty_node_id = shutdown_res.counterparty_node_id;
@@ -1992,7 +1993,7 @@ macro_rules! handle_error {
1992
1993
1993
1994
$self.finish_close_channel(shutdown_res);
1994
1995
if let Some(update) = update_option {
1995
- msg_events .push(events::MessageSendEvent::BroadcastChannelUpdate {
1996
+ broadcast_events .push(events::MessageSendEvent::BroadcastChannelUpdate {
1996
1997
msg: update
1997
1998
});
1998
1999
}
@@ -2008,6 +2009,11 @@ macro_rules! handle_error {
2008
2009
});
2009
2010
}
2010
2011
2012
+ if !broadcast_events.is_empty() {
2013
+ let mut pending_broadcast_messages = $self.pending_broadcast_messages.lock().unwrap();
2014
+ pending_broadcast_messages.append(&mut broadcast_events);
2015
+ }
2016
+
2011
2017
if !msg_events.is_empty() {
2012
2018
let per_peer_state = $self.per_peer_state.read().unwrap();
2013
2019
if let Some(peer_state_mutex) = per_peer_state.get(&$counterparty_node_id) {
@@ -4042,6 +4048,8 @@ where
4042
4048
.ok_or_else(|| APIError::ChannelUnavailable { err: format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id) })?;
4043
4049
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
4044
4050
let peer_state = &mut *peer_state_lock;
4051
+ let mut pending_broadcast_messages = self.pending_broadcast_messages.lock().unwrap();
4052
+
4045
4053
for channel_id in channel_ids {
4046
4054
if !peer_state.has_channel(channel_id) {
4047
4055
return Err(APIError::ChannelUnavailable {
@@ -4058,7 +4066,7 @@ where
4058
4066
}
4059
4067
if let ChannelPhase::Funded(channel) = channel_phase {
4060
4068
if let Ok(msg) = self.get_channel_update_for_broadcast(channel) {
4061
- peer_state.pending_msg_events .push(events::MessageSendEvent::BroadcastChannelUpdate { msg });
4069
+ pending_broadcast_messages .push(events::MessageSendEvent::BroadcastChannelUpdate { msg });
4062
4070
} else if let Ok(msg) = self.get_channel_update_for_unicast(channel) {
4063
4071
peer_state.pending_msg_events.push(events::MessageSendEvent::SendChannelUpdate {
4064
4072
node_id: channel.context.get_counterparty_node_id(),
@@ -4938,6 +4946,7 @@ where
4938
4946
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
4939
4947
let peer_state = &mut *peer_state_lock;
4940
4948
let pending_msg_events = &mut peer_state.pending_msg_events;
4949
+ let mut pending_broadcast_messages = self.pending_broadcast_messages.lock().unwrap();
4941
4950
let counterparty_node_id = *counterparty_node_id;
4942
4951
peer_state.channel_by_id.retain(|chan_id, phase| {
4943
4952
match phase {
@@ -4968,7 +4977,7 @@ where
4968
4977
if n >= DISABLE_GOSSIP_TICKS {
4969
4978
chan.set_channel_update_status(ChannelUpdateStatus::Disabled);
4970
4979
if let Ok(update) = self.get_channel_update_for_broadcast(&chan) {
4971
- pending_msg_events .push(events::MessageSendEvent::BroadcastChannelUpdate {
4980
+ pending_broadcast_messages .push(events::MessageSendEvent::BroadcastChannelUpdate {
4972
4981
msg: update
4973
4982
});
4974
4983
}
@@ -4982,7 +4991,7 @@ where
4982
4991
if n >= ENABLE_GOSSIP_TICKS {
4983
4992
chan.set_channel_update_status(ChannelUpdateStatus::Enabled);
4984
4993
if let Ok(update) = self.get_channel_update_for_broadcast(&chan) {
4985
- pending_msg_events .push(events::MessageSendEvent::BroadcastChannelUpdate {
4994
+ pending_broadcast_messages .push(events::MessageSendEvent::BroadcastChannelUpdate {
4986
4995
msg: update
4987
4996
});
4988
4997
}
@@ -6641,9 +6650,8 @@ where
6641
6650
}
6642
6651
if let Some(ChannelPhase::Funded(chan)) = chan_option {
6643
6652
if let Ok(update) = self.get_channel_update_for_broadcast(&chan) {
6644
- let mut peer_state_lock = peer_state_mutex.lock().unwrap();
6645
- let peer_state = &mut *peer_state_lock;
6646
- peer_state.pending_msg_events.push(events::MessageSendEvent::BroadcastChannelUpdate {
6653
+ let mut pending_broadcast_messages = self.pending_broadcast_messages.lock().unwrap();
6654
+ pending_broadcast_messages.push(events::MessageSendEvent::BroadcastChannelUpdate {
6647
6655
msg: update
6648
6656
});
6649
6657
}
@@ -7299,11 +7307,12 @@ where
7299
7307
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7300
7308
let peer_state = &mut *peer_state_lock;
7301
7309
let pending_msg_events = &mut peer_state.pending_msg_events;
7310
+ let mut pending_broadcast_messages = self.pending_broadcast_messages.lock().unwrap();
7302
7311
if let hash_map::Entry::Occupied(chan_phase_entry) = peer_state.channel_by_id.entry(channel_id) {
7303
7312
if let ChannelPhase::Funded(mut chan) = remove_channel_phase!(self, chan_phase_entry) {
7304
7313
failed_channels.push(chan.context.force_shutdown(false, ClosureReason::HolderForceClosed));
7305
7314
if let Ok(update) = self.get_channel_update_for_broadcast(&chan) {
7306
- pending_msg_events .push(events::MessageSendEvent::BroadcastChannelUpdate {
7315
+ pending_broadcast_messages .push(events::MessageSendEvent::BroadcastChannelUpdate {
7307
7316
msg: update
7308
7317
});
7309
7318
}
@@ -7468,6 +7477,7 @@ where
7468
7477
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7469
7478
let peer_state = &mut *peer_state_lock;
7470
7479
let pending_msg_events = &mut peer_state.pending_msg_events;
7480
+ let mut pending_broadcast_messages = self.pending_broadcast_messages.lock().unwrap();
7471
7481
peer_state.channel_by_id.retain(|channel_id, phase| {
7472
7482
match phase {
7473
7483
ChannelPhase::Funded(chan) => {
@@ -7488,7 +7498,7 @@ where
7488
7498
// We're done with this channel. We got a closing_signed and sent back
7489
7499
// a closing_signed with a closing transaction to broadcast.
7490
7500
if let Ok(update) = self.get_channel_update_for_broadcast(&chan) {
7491
- pending_msg_events .push(events::MessageSendEvent::BroadcastChannelUpdate {
7501
+ pending_broadcast_messages .push(events::MessageSendEvent::BroadcastChannelUpdate {
7492
7502
msg: update
7493
7503
});
7494
7504
}
@@ -8098,6 +8108,16 @@ where
8098
8108
self.pending_outbound_payments.clear_pending_payments()
8099
8109
}
8100
8110
8111
+ /// Checks if at least one peer is connected.
8112
+ pub fn is_some_peer_connected(&self) -> bool {
8113
+ let peer_state = self.per_peer_state.read().unwrap();
8114
+ for (_, peer_mutex) in peer_state.iter() {
8115
+ let peer = peer_mutex.lock().unwrap();
8116
+ if peer.is_connected { return true; }
8117
+ }
8118
+ false
8119
+ }
8120
+
8101
8121
/// When something which was blocking a channel from updating its [`ChannelMonitor`] (e.g. an
8102
8122
/// [`Event`] being handled) completes, this should be called to restore the channel to normal
8103
8123
/// operation. It will double-check that nothing *else* is also blocking the same channel from
@@ -8450,6 +8470,8 @@ where
8450
8470
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
8451
8471
let peer_state = &mut *peer_state_lock;
8452
8472
let pending_msg_events = &mut peer_state.pending_msg_events;
8473
+ let mut pending_broadcast_messages = self.pending_broadcast_messages.lock().unwrap();
8474
+
8453
8475
peer_state.channel_by_id.retain(|_, phase| {
8454
8476
match phase {
8455
8477
// Retain unfunded channels.
@@ -8522,7 +8544,7 @@ where
8522
8544
let reason_message = format!("{}", reason);
8523
8545
failed_channels.push(channel.context.force_shutdown(true, reason));
8524
8546
if let Ok(update) = self.get_channel_update_for_broadcast(&channel) {
8525
- pending_msg_events .push(events::MessageSendEvent::BroadcastChannelUpdate {
8547
+ pending_broadcast_messages .push(events::MessageSendEvent::BroadcastChannelUpdate {
8526
8548
msg: update
8527
8549
});
8528
8550
}
@@ -8969,7 +8991,9 @@ where
8969
8991
// Gossip
8970
8992
&events::MessageSendEvent::SendChannelAnnouncement { .. } => false,
8971
8993
&events::MessageSendEvent::BroadcastChannelAnnouncement { .. } => true,
8972
- &events::MessageSendEvent::BroadcastChannelUpdate { .. } => true,
8994
+ // [`ChannelManager::pending_broadcast_events`] holds the [`BroadcastChannelUpdate`]
8995
+ // This check here is to ensure exhaustivity.
8996
+ &events::MessageSendEvent::BroadcastChannelUpdate { .. } => false,
8973
8997
&events::MessageSendEvent::BroadcastNodeAnnouncement { .. } => true,
8974
8998
&events::MessageSendEvent::SendChannelUpdate { .. } => false,
8975
8999
&events::MessageSendEvent::SendChannelRangeQuery { .. } => false,
@@ -11880,7 +11904,6 @@ mod tests {
11880
11904
assert_eq!(nodes_0_lock.len(), 1);
11881
11905
assert!(nodes_0_lock.contains_key(&funding_output));
11882
11906
}
11883
-
11884
11907
{
11885
11908
// At this stage, `nodes[1]` has proposed a fee for the closing transaction in the
11886
11909
// `handle_closing_signed` call above. As `nodes[1]` has not yet received the signature
0 commit comments