@@ -6446,7 +6446,7 @@ where
6446
6446
Ok(NotifyOption::DoPersist)
6447
6447
}
6448
6448
6449
- fn internal_channel_reestablish(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReestablish) -> Result<() , MsgHandleErrInternal> {
6449
+ fn internal_channel_reestablish(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReestablish) -> Result<NotifyOption , MsgHandleErrInternal> {
6450
6450
let htlc_forwards;
6451
6451
let need_lnd_workaround = {
6452
6452
let per_peer_state = self.per_peer_state.read().unwrap();
@@ -6502,14 +6502,16 @@ where
6502
6502
}
6503
6503
};
6504
6504
6505
+ let mut persist = NotifyOption::SkipPersistHandleEvents;
6505
6506
if let Some(forwards) = htlc_forwards {
6506
6507
self.forward_htlcs(&mut [forwards][..]);
6508
+ persist = NotifyOption::DoPersist;
6507
6509
}
6508
6510
6509
6511
if let Some(channel_ready_msg) = need_lnd_workaround {
6510
6512
self.internal_channel_ready(counterparty_node_id, &channel_ready_msg)?;
6511
6513
}
6512
- Ok(() )
6514
+ Ok(persist )
6513
6515
}
6514
6516
6515
6517
/// Process pending events from the [`chain::Watch`], returning whether any events were processed.
@@ -7674,12 +7676,22 @@ where
7674
7676
}
7675
7677
7676
7678
fn handle_channel_reestablish(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReestablish) {
7677
- let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
7678
- let _ = handle_error!(self, self.internal_channel_reestablish(counterparty_node_id, msg), *counterparty_node_id);
7679
+ let _persistence_guard = PersistenceNotifierGuard::optionally_notify(self, || {
7680
+ let res = self.internal_channel_reestablish(counterparty_node_id, msg);
7681
+ let persist = match &res {
7682
+ Err(e) if e.closes_channel() => NotifyOption::DoPersist,
7683
+ Err(_) => NotifyOption::SkipPersistHandleEvents,
7684
+ Ok(persist) => *persist,
7685
+ };
7686
+ let _ = handle_error!(self, res, *counterparty_node_id);
7687
+ persist
7688
+ });
7679
7689
}
7680
7690
7681
7691
fn peer_disconnected(&self, counterparty_node_id: &PublicKey) {
7682
- let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
7692
+ let _persistence_guard = PersistenceNotifierGuard::optionally_notify(
7693
+ self, || NotifyOption::SkipPersistHandleEvents);
7694
+
7683
7695
let mut failed_channels = Vec::new();
7684
7696
let mut per_peer_state = self.per_peer_state.write().unwrap();
7685
7697
let remove_peer = {
0 commit comments