diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -67,12 +67,15 @@ dummyNode1.fSuccessfullyConnected = true; // This test requires that we have a chain with non-zero work. + LOCK(cs_main); BOOST_CHECK(chainActive.Tip() != nullptr); BOOST_CHECK(chainActive.Tip()->nChainWork > 0); // Test starts here + LOCK(dummyNode1.cs_sendProcessing); // should result in getheaders peerLogic->SendMessages(config, &dummyNode1, interruptDummy); + LOCK(dummyNode1.cs_vSend); BOOST_CHECK(dummyNode1.vSendMsg.size() > 0); dummyNode1.vSendMsg.clear(); @@ -191,8 +194,12 @@ peerLogic->InitializeNode(config, &dummyNode1); dummyNode1.nVersion = 1; dummyNode1.fSuccessfullyConnected = true; - // Should get banned. - Misbehaving(dummyNode1.GetId(), 100, ""); + { + LOCK(cs_main); + // Should get banned. + Misbehaving(dummyNode1.GetId(), 100, ""); + } + LOCK(dummyNode1.cs_sendProcessing); peerLogic->SendMessages(config, &dummyNode1, interruptDummy); BOOST_CHECK(connman->IsBanned(addr1)); // Different IP, not banned. @@ -205,13 +212,20 @@ peerLogic->InitializeNode(config, &dummyNode2); dummyNode2.nVersion = 1; dummyNode2.fSuccessfullyConnected = true; - Misbehaving(dummyNode2.GetId(), 50, ""); + { + LOCK(cs_main); + Misbehaving(dummyNode2.GetId(), 50, ""); + } + LOCK(dummyNode2.cs_sendProcessing); peerLogic->SendMessages(config, &dummyNode2, interruptDummy); // 2 not banned yet... BOOST_CHECK(!connman->IsBanned(addr2)); // ... but 1 still should be. BOOST_CHECK(connman->IsBanned(addr1)); - Misbehaving(dummyNode2.GetId(), 50, ""); + { + LOCK(cs_main); + Misbehaving(dummyNode2.GetId(), 50, ""); + } peerLogic->SendMessages(config, &dummyNode2, interruptDummy); BOOST_CHECK(connman->IsBanned(addr2)); @@ -234,13 +248,23 @@ peerLogic->InitializeNode(config, &dummyNode1); dummyNode1.nVersion = 1; dummyNode1.fSuccessfullyConnected = true; - Misbehaving(dummyNode1.GetId(), 100, ""); + { + LOCK(cs_main); + Misbehaving(dummyNode1.GetId(), 100, ""); + } + LOCK(dummyNode1.cs_sendProcessing); peerLogic->SendMessages(config, &dummyNode1, interruptDummy); BOOST_CHECK(!connman->IsBanned(addr1)); - Misbehaving(dummyNode1.GetId(), 10, ""); + { + LOCK(cs_main); + Misbehaving(dummyNode1.GetId(), 10, ""); + } peerLogic->SendMessages(config, &dummyNode1, interruptDummy); BOOST_CHECK(!connman->IsBanned(addr1)); - Misbehaving(dummyNode1.GetId(), 1, ""); + { + LOCK(cs_main); + Misbehaving(dummyNode1.GetId(), 1, ""); + } peerLogic->SendMessages(config, &dummyNode1, interruptDummy); BOOST_CHECK(connman->IsBanned(addr1)); gArgs.ForceSetArg("-banscore", std::to_string(DEFAULT_BANSCORE_THRESHOLD)); @@ -266,7 +290,11 @@ dummyNode.nVersion = 1; dummyNode.fSuccessfullyConnected = true; - Misbehaving(dummyNode.GetId(), 100, ""); + { + LOCK(cs_main); + Misbehaving(dummyNode.GetId(), 100, ""); + } + LOCK(dummyNode.cs_sendProcessing); peerLogic->SendMessages(config, &dummyNode, interruptDummy); BOOST_CHECK(connman->IsBanned(addr)); @@ -282,6 +310,7 @@ CTransactionRef RandomOrphan() { std::map::iterator it; + LOCK(cs_main); it = mapOrphanTransactions.lower_bound(InsecureRand256()); if (it == mapOrphanTransactions.end()) { it = mapOrphanTransactions.begin(); @@ -347,6 +376,7 @@ BOOST_CHECK(!AddOrphanTx(MakeTransactionRef(tx), i)); } + LOCK(cs_main); // Test EraseOrphansFor: for (NodeId i = 0; i < 3; i++) { size_t sizeBefore = mapOrphanTransactions.size(); diff --git a/src/test/blockencodings_tests.cpp b/src/test/blockencodings_tests.cpp --- a/src/test/blockencodings_tests.cpp +++ b/src/test/blockencodings_tests.cpp @@ -65,6 +65,7 @@ CBlock block(BuildBlockTestCase()); pool.addUnchecked(block.vtx[2]->GetId(), entry.FromTx(*block.vtx[2])); + LOCK(pool.cs); BOOST_CHECK_EQUAL( pool.mapTx.find(block.vtx[2]->GetId())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0); @@ -175,6 +176,7 @@ CBlock block(BuildBlockTestCase()); pool.addUnchecked(block.vtx[2]->GetId(), entry.FromTx(*block.vtx[2])); + LOCK(pool.cs); BOOST_CHECK_EQUAL( pool.mapTx.find(block.vtx[2]->GetId())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0); @@ -256,6 +258,7 @@ CBlock block(BuildBlockTestCase()); pool.addUnchecked(block.vtx[1]->GetId(), entry.FromTx(*block.vtx[1])); + LOCK(pool.cs); BOOST_CHECK_EQUAL( pool.mapTx.find(block.vtx[1]->GetId())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0); diff --git a/src/test/mempool_tests.cpp b/src/test/mempool_tests.cpp --- a/src/test/mempool_tests.cpp +++ b/src/test/mempool_tests.cpp @@ -333,6 +333,7 @@ sortedOrder[2] = tx1.GetId().ToString(); // 10000 sortedOrder[3] = tx4.GetId().ToString(); // 15000 sortedOrder[4] = tx2.GetId().ToString(); // 20000 + LOCK(pool.cs); CheckSort(pool, sortedOrder, "MempoolIndexingTest1"); /* low fee but with high fee child */ @@ -560,6 +561,7 @@ } sortedOrder[4] = tx3.GetId().ToString(); // 0 + LOCK(pool.cs); CheckSort(pool, sortedOrder, "MempoolAncestorIndexingTest1"); diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp --- a/src/test/test_bitcoin.cpp +++ b/src/test/test_bitcoin.cpp @@ -183,7 +183,10 @@ // IncrementExtraNonce creates a valid coinbase and merkleRoot unsigned int extraNonce = 0; - IncrementExtraNonce(config, &block, chainActive.Tip(), extraNonce); + { + LOCK(cs_main); + IncrementExtraNonce(config, &block, chainActive.Tip(), extraNonce); + } while (!CheckProofOfWork(block.GetHash(), block.nBits, config)) { ++block.nNonce; diff --git a/src/test/txvalidationcache_tests.cpp b/src/test/txvalidationcache_tests.cpp --- a/src/test/txvalidationcache_tests.cpp +++ b/src/test/txvalidationcache_tests.cpp @@ -64,6 +64,7 @@ // Test 1: block with both of those transactions should be rejected. block = CreateAndProcessBlock(spends, scriptPubKey); + LOCK(cs_main); BOOST_CHECK(chainActive.Tip()->GetBlockHash() != block.GetHash()); // Test 2: ... and should be rejected if spend1 is in the memory pool @@ -151,7 +152,10 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup) { // Test that passing CheckInputs with one set of script flags doesn't imply // that we would pass again with a different set of flags. - InitScriptExecutionCache(); + { + LOCK(cs_main); + InitScriptExecutionCache(); + } CScript p2pk_scriptPubKey = CScript() << ToByteVector(coinbaseKey.GetPubKey()) << OP_CHECKSIG; diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -594,6 +594,7 @@ vpwallets[0] = &wallet; ::importwallet(GetConfig(), request); + LOCK(wallet.cs_wallet); BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3); BOOST_CHECK_EQUAL(coinbaseTxns.size(), 103); for (size_t i = 0; i < coinbaseTxns.size(); ++i) { @@ -638,6 +639,7 @@ SetMockTime(mockTime); CBlockIndex *block = nullptr; if (blockTime > 0) { + LOCK(cs_main); auto inserted = mapBlockIndex.emplace(GetRandHash(), new CBlockIndex); assert(inserted.second); const uint256 &hash = inserted.first->first; @@ -651,6 +653,7 @@ wtx.SetMerkleBranch(block, 0); } wallet.AddToWallet(wtx); + LOCK(wallet.cs_wallet); return wallet.mapWallet.at(wtx.GetId()).nTimeSmart; } @@ -685,6 +688,7 @@ BOOST_AUTO_TEST_CASE(LoadReceiveRequests) { CTxDestination dest = CKeyID(); + LOCK(pwalletMain->cs_wallet); pwalletMain->AddDestData(dest, "misc", "val_misc"); pwalletMain->AddDestData(dest, "rr0", "val_rr0"); pwalletMain->AddDestData(dest, "rr1", "val_rr1"); @@ -727,6 +731,7 @@ changePos, error)); CValidationState state; BOOST_CHECK(wallet->CommitTransaction(wtx, reservekey, nullptr, state)); + LOCK(wallet->cs_wallet); auto it = wallet->mapWallet.find(wtx.GetId()); BOOST_CHECK(it != wallet->mapWallet.end()); CreateAndProcessBlock({CMutableTransaction(*it->second.tx)},