@@ -3629,37 +3629,19 @@ macro_rules! handle_monitor_update_completion {
3629
3629
}
3630
3630
3631
3631
macro_rules! handle_new_monitor_update {
3632
- ($self: ident, $update_res: expr, $logger: expr, $channel_id: expr, _internal, $completed: expr) => { {
3633
- debug_assert!($self.background_events_processed_since_startup.load(Ordering::Acquire));
3634
- match $update_res {
3635
- ChannelMonitorUpdateStatus::UnrecoverableError => {
3636
- let err_str = "ChannelMonitor[Update] persistence failed unrecoverably. This indicates we cannot continue normal operation and must shut down.";
3637
- log_error!($logger, "{}", err_str);
3638
- panic!("{}", err_str);
3639
- },
3640
- ChannelMonitorUpdateStatus::InProgress => {
3641
- #[cfg(not(any(test, feature = "_externalize_tests")))]
3642
- if $self.monitor_update_type.swap(1, Ordering::Relaxed) == 2 {
3643
- panic!("Cannot use both ChannelMonitorUpdateStatus modes InProgress and Completed without restart");
3644
- }
3645
- log_debug!($logger, "ChannelMonitor update for {} in flight, holding messages until the update completes.",
3646
- $channel_id);
3647
- false
3648
- },
3649
- ChannelMonitorUpdateStatus::Completed => {
3650
- #[cfg(not(any(test, feature = "_externalize_tests")))]
3651
- if $self.monitor_update_type.swap(2, Ordering::Relaxed) == 1 {
3652
- panic!("Cannot use both ChannelMonitorUpdateStatus modes InProgress and Completed without restart");
3653
- }
3654
- $completed;
3655
- true
3656
- },
3657
- }
3658
- } };
3659
3632
($self: ident, $update_res: expr, $peer_state_lock: expr, $peer_state: expr, $per_peer_state_lock: expr, $chan: expr, INITIAL_MONITOR) => {
3660
3633
let logger = WithChannelContext::from(&$self.logger, &$chan.context, None);
3661
- handle_new_monitor_update!($self, $update_res, logger, $chan.context.channel_id(), _internal,
3662
- handle_monitor_update_completion!($self, $peer_state_lock, $peer_state, $per_peer_state_lock, $chan))
3634
+ let update_completed =
3635
+ $self.handle_monitor_update_res($update_res, $chan.context.channel_id(), logger);
3636
+ if update_completed {
3637
+ handle_monitor_update_completion!(
3638
+ $self,
3639
+ $peer_state_lock,
3640
+ $peer_state,
3641
+ $per_peer_state_lock,
3642
+ $chan
3643
+ );
3644
+ }
3663
3645
};
3664
3646
(
3665
3647
$self: ident, $funding_txo: expr, $update: expr, $peer_state: expr, $logger: expr,
@@ -3682,7 +3664,11 @@ macro_rules! handle_new_monitor_update {
3682
3664
if $self.background_events_processed_since_startup.load(Ordering::Acquire) {
3683
3665
let update_res =
3684
3666
$self.chain_monitor.update_channel($chan_id, &$in_flight_updates[$update_idx]);
3685
- handle_new_monitor_update!($self, update_res, $logger, $chan_id, _internal, $completed)
3667
+ let update_completed = $self.handle_monitor_update_res(update_res, $chan_id, $logger);
3668
+ if update_completed {
3669
+ $completed;
3670
+ }
3671
+ update_completed
3686
3672
} else {
3687
3673
// We blindly assume that the ChannelMonitorUpdate will be regenerated on startup if we
3688
3674
// fail to persist it. This is a fairly safe assumption, however, since anything we do
@@ -9549,6 +9535,36 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
9549
9535
}
9550
9536
}
9551
9537
9538
+ /// Returns whether the monitor update is completed, `false` if the update is in-progress.
9539
+ fn handle_monitor_update_res<LG: Logger>(
9540
+ &self, update_res: ChannelMonitorUpdateStatus, channel_id: ChannelId, logger: LG,
9541
+ ) -> bool {
9542
+ debug_assert!(self.background_events_processed_since_startup.load(Ordering::Acquire));
9543
+ match update_res {
9544
+ ChannelMonitorUpdateStatus::UnrecoverableError => {
9545
+ let err_str = "ChannelMonitor[Update] persistence failed unrecoverably. This indicates we cannot continue normal operation and must shut down.";
9546
+ log_error!(logger, "{}", err_str);
9547
+ panic!("{}", err_str);
9548
+ },
9549
+ ChannelMonitorUpdateStatus::InProgress => {
9550
+ #[cfg(not(any(test, feature = "_externalize_tests")))]
9551
+ if self.monitor_update_type.swap(1, Ordering::Relaxed) == 2 {
9552
+ panic!("Cannot use both ChannelMonitorUpdateStatus modes InProgress and Completed without restart");
9553
+ }
9554
+ log_debug!(logger, "ChannelMonitor update for {} in flight, holding messages until the update completes.",
9555
+ channel_id);
9556
+ false
9557
+ },
9558
+ ChannelMonitorUpdateStatus::Completed => {
9559
+ #[cfg(not(any(test, feature = "_externalize_tests")))]
9560
+ if self.monitor_update_type.swap(2, Ordering::Relaxed) == 1 {
9561
+ panic!("Cannot use both ChannelMonitorUpdateStatus modes InProgress and Completed without restart");
9562
+ }
9563
+ true
9564
+ },
9565
+ }
9566
+ }
9567
+
9552
9568
/// Accepts a request to open a channel after a [`Event::OpenChannelRequest`].
9553
9569
///
9554
9570
/// The `temporary_channel_id` parameter indicates which inbound channel should be accepted,
0 commit comments