diff --git a/src/ripple/app/tx/impl/Transactor.cpp b/src/ripple/app/tx/impl/Transactor.cpp index 6d06e89ad..d06ca31da 100644 --- a/src/ripple/app/tx/impl/Transactor.cpp +++ b/src/ripple/app/tx/impl/Transactor.cpp @@ -1506,15 +1506,13 @@ Transactor::addWeakTSHFromSandbox(detail::ApplyViewBase const& pv) TER Transactor::doTSH( bool strong, // only strong iff true, only weak iff false + std::vector> tsh, hook::HookStateMap& stateMap, std::vector& results, std::shared_ptr const& provisionalMeta) { auto& view = ctx_.view(); - std::vector> tsh = - hook::getTransactionalStakeHolders(ctx_.tx, view); - // add the extra TSH marked out by the specific transactor (if applicable) if (!strong) for (auto& weakTsh : additionalWeakTSH_) @@ -1772,6 +1770,9 @@ Transactor::operator()() // application to the ledger std::map> aawMap; + std::vector> tsh = + hook::getTransactionalStakeHolders(ctx_.tx, ctx_.view()); + // Pre-application (Strong TSH) Hooks are executed here // These TSH have the right to rollback. // Weak TSH and callback are executed post-application. @@ -1800,7 +1801,7 @@ Transactor::operator()() // (who have the right to rollback the txn), any weak TSH will be // executed after doApply has been successful (callback as well) - result = doTSH(true, stateMap, hookResults, {}); + result = doTSH(true, tsh, stateMap, hookResults, {}); } // write state if all chains executed successfully @@ -2054,7 +2055,7 @@ Transactor::operator()() hook::HookStateMap stateMap; std::vector weakResults; - doTSH(false, stateMap, weakResults, proMeta); + doTSH(false, tsh, stateMap, weakResults, proMeta); // execute any hooks that nominated for 'again as weak' for (auto const& [accID, hookHashes] : aawMap) diff --git a/src/ripple/app/tx/impl/Transactor.h b/src/ripple/app/tx/impl/Transactor.h index f6dd1ec53..624aa9984 100644 --- a/src/ripple/app/tx/impl/Transactor.h +++ b/src/ripple/app/tx/impl/Transactor.h @@ -188,6 +188,7 @@ protected: TER doTSH( bool strong, // only do strong TSH iff true, otheriwse only weak + std::vector> tsh, hook::HookStateMap& stateMap, std::vector& result, std::shared_ptr const& provisionalMeta);