From ce82a33186cd70ee46eaee812322ba1079b796b4 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Tue, 18 Jan 2022 21:48:28 +0000 Subject: [PATCH] Persist `ChannelManager` before `BackgroundProcessor` exits Fixes #1237. --- lightning-background-processor/src/lib.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs index 2dbc8053..8f6ed657 100644 --- a/lightning-background-processor/src/lib.rs +++ b/lightning-background-processor/src/lib.rs @@ -232,7 +232,7 @@ impl BackgroundProcessor { // Exit the loop if the background processor was requested to stop. if stop_thread.load(Ordering::Acquire) == true { log_trace!(logger, "Terminating background processor."); - return Ok(()); + break; } if last_freshness_call.elapsed().as_secs() > FRESHNESS_TIMER { log_trace!(logger, "Calling ChannelManager's timer_tick_occurred"); @@ -269,6 +269,10 @@ impl BackgroundProcessor { } } } + // After we exit, ensure we persist the ChannelManager one final time - this avoids + // some races where users quit while channel updates were in-flight, with + // ChannelMonitor update(s) persisted without a corresponding ChannelManager update. + persister.persist_manager(&*channel_manager) }); Self { stop_thread: stop_thread_clone, thread_handle: Some(handle) } } -- 2.30.2