diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index 75aae0eabe..600251aaa1 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -811,7 +811,7 @@ struct controller_impl { chainbase::database db; block_log blog; std::optional pending; - mutable fork_database fork_db; + fork_database fork_db; std::optional pacemaker; std::atomic if_irreversible_block_num{0}; resource_limits_manager resource_limits; diff --git a/libraries/chain/include/eosio/chain/fork_database.hpp b/libraries/chain/include/eosio/chain/fork_database.hpp index 654b583095..9e90c6e310 100644 --- a/libraries/chain/include/eosio/chain/fork_database.hpp +++ b/libraries/chain/include/eosio/chain/fork_database.hpp @@ -133,6 +133,15 @@ namespace eosio::chain { return std::visit([&](auto& forkdb) -> R { return f(forkdb); }, v); } + template + R apply(const F& f) const { + std::lock_guard g(m); + if constexpr (std::is_same_v) + std::visit([&](const auto& forkdb) { f(forkdb); }, v); + else + return std::visit([&](const auto& forkdb) -> R { return f(forkdb); }, v); + } + template R apply_if(const F& f) { if constexpr (std::is_same_v)