mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-01 03:01:09 +02:00
Merge bitcoin/bitcoin#30122: bench: enable wallet creation benchmarks on all platforms
7c8abf3c20
bench: bugfix, properly release wallet before erasing directory (furszy) Pull request description: Simple fix for #29816. Since the wallet is appended to the global `WalletContext` during creation, merely calling `reset()` on the benchmark shared_pointer is insufficient to destruct the wallet. This no destruction of the wallet object results in keeping the db connection open, which was causes the `fs::remove_all()` failure on Windows. ACKs for top commit: maflcko: utACK7c8abf3c20
kevkevinpal: utACK [7c8abf3
](7c8abf3c20
) hebasto: re-ACK7c8abf3c20
, I agree with changes since my recent [review](https://github.com/bitcoin/bitcoin/pull/30122#pullrequestreview-2061694682). Tree-SHA512: 279df65bea8f7aa02af0a2efed62dca9bf9b29cb748eb369c602d223e08a8a907dea7b1bffbd3dab91b1656c1d91b18a9a0534bc3f153bd751414b0e6230b3a4
This commit is contained in:
@ -34,14 +34,15 @@ static void WalletCreate(benchmark::Bench& bench, bool encrypted)
|
|||||||
bilingual_str error_string;
|
bilingual_str error_string;
|
||||||
std::vector<bilingual_str> warnings;
|
std::vector<bilingual_str> warnings;
|
||||||
|
|
||||||
fs::path wallet_path = test_setup->m_path_root / strprintf("test_wallet_%d", random.rand32()).c_str();
|
auto wallet_path = fs::PathToString(test_setup->m_path_root / "test_wallet");
|
||||||
bench.run([&] {
|
bench.run([&] {
|
||||||
auto wallet = CreateWallet(context, wallet_path.utf8string(), /*load_on_start=*/std::nullopt, options, status, error_string, warnings);
|
auto wallet = CreateWallet(context, wallet_path, /*load_on_start=*/std::nullopt, options, status, error_string, warnings);
|
||||||
assert(status == DatabaseStatus::SUCCESS);
|
assert(status == DatabaseStatus::SUCCESS);
|
||||||
assert(wallet != nullptr);
|
assert(wallet != nullptr);
|
||||||
|
|
||||||
// Cleanup
|
// Release wallet
|
||||||
wallet.reset();
|
RemoveWallet(context, wallet, /*load_on_start=*/ std::nullopt);
|
||||||
|
UnloadWallet(std::move(wallet));
|
||||||
fs::remove_all(wallet_path);
|
fs::remove_all(wallet_path);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -49,14 +50,9 @@ static void WalletCreate(benchmark::Bench& bench, bool encrypted)
|
|||||||
static void WalletCreatePlain(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/false); }
|
static void WalletCreatePlain(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/false); }
|
||||||
static void WalletCreateEncrypted(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/true); }
|
static void WalletCreateEncrypted(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/true); }
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
// TODO: Being built with MSVC, the fs::remove_all() call in
|
|
||||||
// the WalletCreate() fails with the error "The process cannot
|
|
||||||
// access the file because it is being used by another process."
|
|
||||||
#ifdef USE_SQLITE
|
#ifdef USE_SQLITE
|
||||||
BENCHMARK(WalletCreatePlain, benchmark::PriorityLevel::LOW);
|
BENCHMARK(WalletCreatePlain, benchmark::PriorityLevel::LOW);
|
||||||
BENCHMARK(WalletCreateEncrypted, benchmark::PriorityLevel::LOW);
|
BENCHMARK(WalletCreateEncrypted, benchmark::PriorityLevel::LOW);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
} // namespace wallet
|
} // namespace wallet
|
||||||
|
Reference in New Issue
Block a user