Merge #18615: test: Avoid accessing free'd memory in validation_chainstatemanager_tests

fa176e253f test: Avoid accessing free'd memory in validation_chainstatemanager_tests (MarcoFalke)

Pull request description:

ACKs for top commit:
  ryanofsky:
    Code review ACK fa176e253f, though if you have to update this again, would suggest separating txindex test cleanup and the chainstatemanager test fix in separate commits, or identifying which part of the change is the bugfix fix in the commit description. Also to clean up the txindex test it might make sense to call SyncWithValidationInterfaceQueue in the test destructor to prevent nondeterminism in other tests

Tree-SHA512: 34c5dca283a7c205cd42b6aa59f00a71fd1bd980bc3d6640a18b280be11470bfabb2fd8c93fadde6fb8e084bcf96c80ec3aa72bbccccfde8a8260d173eaad08f
This commit is contained in:
MarcoFalke 2020-04-15 14:37:51 -04:00
commit 4bd6bc5cb4
No known key found for this signature in database
GPG key ID: CE2B75697E69A548
2 changed files with 8 additions and 9 deletions

View file

@ -70,12 +70,8 @@ BOOST_FIXTURE_TEST_CASE(txindex_initial_sync, TestChain100Setup)
// shutdown sequence (c.f. Shutdown() in init.cpp)
txindex.Stop();
// txindex job may be scheduled, so stop scheduler before destructing
m_node.scheduler->stop();
threadGroup.interrupt_all();
threadGroup.join_all();
// Rest of shutdown sequence and destructors happen in ~TestingSetup()
// Let scheduler events finish running to avoid accessing any memory related to txindex after it is destructed
SyncWithValidationInterfaceQueue();
}
BOOST_AUTO_TEST_SUITE_END()

View file

@ -3,12 +3,13 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
//
#include <chainparams.h>
#include <random.h>
#include <uint256.h>
#include <consensus/validation.h>
#include <random.h>
#include <sync.h>
#include <test/util/setup_common.h>
#include <uint256.h>
#include <validation.h>
#include <validationinterface.h>
#include <vector>
@ -97,7 +98,9 @@ BOOST_AUTO_TEST_CASE(chainstatemanager)
exp_tip = c1.m_chain.Tip();
BOOST_CHECK_EQUAL(validated_tip, exp_tip);
// Avoid triggering the address sanitizer.
// Let scheduler events finish running to avoid accessing memory that is going to be unloaded
SyncWithValidationInterfaceQueue();
WITH_LOCK(::cs_main, manager.Unload());
}