@@ -13576,7 +13576,7 @@ where
13576
13576
#[rustfmt::skip]
13577
13577
fn peer_disconnected(&self, counterparty_node_id: PublicKey) {
13578
13578
let _persistence_guard = PersistenceNotifierGuard::optionally_notify(self, || {
13579
- let mut persist = NotifyOption::SkipPersistHandleEvents ;
13579
+ let mut splice_failed_events = Vec::new() ;
13580
13580
let mut failed_channels: Vec<(Result<Infallible, _>, _)> = Vec::new();
13581
13581
let mut per_peer_state = self.per_peer_state.write().unwrap();
13582
13582
let remove_peer = {
@@ -13589,23 +13589,21 @@ where
13589
13589
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
13590
13590
let peer_state = &mut *peer_state_lock;
13591
13591
let pending_msg_events = &mut peer_state.pending_msg_events;
13592
- let pending_events = &mut self.pending_events.lock().unwrap();
13593
13592
peer_state.channel_by_id.retain(|_, chan| {
13594
13593
let logger = WithChannelContext::from(&self.logger, &chan.context(), None);
13595
13594
let DisconnectResult { is_resumable, splice_funding_failed } =
13596
13595
chan.peer_disconnected_is_resumable(&&logger);
13597
13596
13598
13597
if let Some(splice_funding_failed) = splice_funding_failed {
13599
- pending_events.push_back( (events::Event::SpliceFailed {
13598
+ splice_failed_events.push (events::Event::SpliceFailed {
13600
13599
channel_id: chan.context().channel_id(),
13601
13600
counterparty_node_id,
13602
13601
user_channel_id: chan.context().get_user_id(),
13603
13602
abandoned_funding_txo: splice_funding_failed.funding_txo,
13604
13603
channel_type: splice_funding_failed.channel_type,
13605
13604
contributed_inputs: splice_funding_failed.contributed_inputs,
13606
13605
contributed_outputs: splice_funding_failed.contributed_outputs,
13607
- }, None));
13608
- persist = NotifyOption::DoPersist;
13606
+ });
13609
13607
}
13610
13608
13611
13609
if is_resumable {
@@ -13691,6 +13689,18 @@ where
13691
13689
}
13692
13690
mem::drop(per_peer_state);
13693
13691
13692
+ let persist = if splice_failed_events.is_empty() {
13693
+ NotifyOption::SkipPersistHandleEvents
13694
+ } else {
13695
+ NotifyOption::DoPersist
13696
+ };
13697
+
13698
+ let mut pending_events = self.pending_events.lock().unwrap();
13699
+ for event in splice_failed_events {
13700
+ pending_events.push_back((event, None));
13701
+ }
13702
+ mem::drop(pending_events);
13703
+
13694
13704
for (err, counterparty_node_id) in failed_channels.drain(..) {
13695
13705
let _ = handle_error!(self, err, counterparty_node_id);
13696
13706
}
0 commit comments