From 5362b9f8e3d2b63bd2c55fb3406f31716fa30f56 Mon Sep 17 00:00:00 2001 From: kevin Heifner Date: Wed, 10 Dec 2025 09:15:03 -0600 Subject: [PATCH] Do not oc interrupt during replay. --- libraries/chain/controller.cpp | 4 ++++ libraries/chain/include/sysio/chain/controller.hpp | 2 ++ .../chain/include/sysio/chain/wasm_interface_private.hpp | 4 +++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index adced4ea3c..9eeed0f042 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -4108,6 +4108,10 @@ void controller::set_disable_replay_opts( bool v ) { my->conf.disable_replay_opts = v; } +bool controller::is_replaying() const { + return my->replaying; +} + block_handle controller::head()const { return my->chain_head; } diff --git a/libraries/chain/include/sysio/chain/controller.hpp b/libraries/chain/include/sysio/chain/controller.hpp index 24ff09cfb4..0d65d3748d 100644 --- a/libraries/chain/include/sysio/chain/controller.hpp +++ b/libraries/chain/include/sysio/chain/controller.hpp @@ -286,6 +286,8 @@ namespace sysio::chain { void set_key_blacklist( const flat_set& ); void set_disable_replay_opts( bool v ); + // thread safe + bool is_replaying() const; block_handle head()const; block_handle fork_db_head()const; diff --git a/libraries/chain/include/sysio/chain/wasm_interface_private.hpp b/libraries/chain/include/sysio/chain/wasm_interface_private.hpp index e67df1ca60..6082b33411 100644 --- a/libraries/chain/include/sysio/chain/wasm_interface_private.hpp +++ b/libraries/chain/include/sysio/chain/wasm_interface_private.hpp @@ -171,7 +171,9 @@ struct sysvmoc_tier { // Not allowing interrupt for onblock seems rather harmless, so instead of distinguishing between onerror and // onblock, just disallow for all implicit. const bool allow_oc_interrupt = attempt_tierup && context.is_applying_block() && - context.trx_context.has_undo() && !context.trx_context.is_implicit(); + context.trx_context.has_undo() && + !context.trx_context.is_implicit() && + !context.control.is_replaying(); auto ex = fc::make_scoped_exit([&]() { if (allow_oc_interrupt) { sys_vm_oc_compile_interrupt = false;