projects
/
rust-lightning
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7b6a7bb
)
Persist `ChannelManager` before `BackgroundProcessor` exits
2022-01-background-persist-exit
author
Matt Corallo
<git@bluematt.me>
Tue, 18 Jan 2022 21:48:28 +0000
(21:48 +0000)
committer
Matt Corallo
<git@bluematt.me>
Tue, 18 Jan 2022 22:07:15 +0000
(22:07 +0000)
Fixes #1237.
lightning-background-processor/src/lib.rs
patch
|
blob
|
history
diff --git
a/lightning-background-processor/src/lib.rs
b/lightning-background-processor/src/lib.rs
index 2dbc8053b4eb1247e5d64dc482e1817ad5db08ec..8f6ed657b3d8e116b5913ebb9b75e4dbdc218e41 100644
(file)
--- 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.");
// 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");
}
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) }
}
});
Self { stop_thread: stop_thread_clone, thread_handle: Some(handle) }
}