Break the ref cycle (#11371)

This commit is contained in:
Arkadiy Paronyan
2022-05-06 14:55:15 +02:00
committed by GitHub
parent 849300d173
commit faa089e7e1
2 changed files with 13 additions and 2 deletions
@@ -38,6 +38,7 @@ async fn running_the_node_works_and_can_be_interrupted() {
Command::new(cargo_bin("substrate"))
.args(&["--dev", "-d"])
.arg(base_path.path())
.arg("--db=paritydb")
.arg("--no-hardware-benchmarks")
.spawn()
.unwrap(),
@@ -52,6 +53,12 @@ async fn running_the_node_works_and_can_be_interrupted() {
"the process must exit gracefully after signal {}",
signal,
);
// Check if the database was closed gracefully. If it was not,
// there may exist a ref cycle that prevents the Client from being dropped properly.
//
// parity-db only writes the stats file on clean shutdown.
let stats_file = base_path.path().join("chains/dev/paritydb/full/stats.txt");
assert!(std::path::Path::exists(&stats_file));
}
run_command_and_kill(SIGINT).await;
+6 -2
View File
@@ -1783,9 +1783,13 @@ where
// startup rather than waiting until importing the next epoch change block.
prune_finalized(client.clone(), &mut epoch_changes.shared_data())?;
let client_clone = client.clone();
let client_weak = Arc::downgrade(&client);
let on_finality = move |summary: &FinalityNotification<Block>| {
aux_storage_cleanup(client_clone.as_ref(), summary)
if let Some(client) = client_weak.upgrade() {
aux_storage_cleanup(client.as_ref(), summary)
} else {
Default::default()
}
};
client.register_finality_action(Box::new(on_finality));