aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2023-07-07 10:37:36 +0100
committerHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2023-10-03 10:52:14 +0100
commitd03eaacbcfb276fb638db1b423113ff43bd7ec41 (patch)
treec4e477597f3db4e68436a5a34815ecf3506c04d0
parentbe4ff3060b7b43b496dfb5a2c02b114b2b717106 (diff)
Make `CCheckQueue` destructor stop worker threads
-rw-r--r--src/bench/checkqueue.cpp1
-rw-r--r--src/bitcoin-chainstate.cpp1
-rw-r--r--src/checkqueue.h10
-rw-r--r--src/init.cpp3
-rw-r--r--src/test/checkqueue_tests.cpp6
-rw-r--r--src/test/transaction_tests.cpp1
-rw-r--r--src/test/util/setup_common.cpp1
-rw-r--r--src/validation.cpp7
-rw-r--r--src/validation.h1
9 files changed, 2 insertions, 29 deletions
diff --git a/src/bench/checkqueue.cpp b/src/bench/checkqueue.cpp
index 70e0b86eba..c7e1ad4f83 100644
--- a/src/bench/checkqueue.cpp
+++ b/src/bench/checkqueue.cpp
@@ -61,7 +61,6 @@ static void CCheckQueueSpeedPrevectorJob(benchmark::Bench& bench)
// it is done explicitly here for clarity
control.Wait();
});
- queue.StopWorkerThreads();
ECC_Stop();
}
BENCHMARK(CCheckQueueSpeedPrevectorJob, benchmark::PriorityLevel::HIGH);
diff --git a/src/bitcoin-chainstate.cpp b/src/bitcoin-chainstate.cpp
index 1b4a313029..a8f6fec90a 100644
--- a/src/bitcoin-chainstate.cpp
+++ b/src/bitcoin-chainstate.cpp
@@ -290,7 +290,6 @@ epilogue:
// dereferencing and UB.
scheduler.stop();
if (chainman.m_thread_load.joinable()) chainman.m_thread_load.join();
- chainman.StopScriptCheckWorkerThreads();
GetMainSignals().FlushBackgroundCallbacks();
{
diff --git a/src/checkqueue.h b/src/checkqueue.h
index a3299fb3fe..a89be2cfd5 100644
--- a/src/checkqueue.h
+++ b/src/checkqueue.h
@@ -179,24 +179,16 @@ public:
}
}
- //! Stop all of the worker threads.
- void StopWorkerThreads() EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
+ ~CCheckQueue()
{
WITH_LOCK(m_mutex, m_request_stop = true);
m_worker_cv.notify_all();
for (std::thread& t : m_worker_threads) {
t.join();
}
- m_worker_threads.clear();
- WITH_LOCK(m_mutex, m_request_stop = false);
}
bool HasThreads() const { return !m_worker_threads.empty(); }
-
- ~CCheckQueue()
- {
- assert(m_worker_threads.empty());
- }
};
/**
diff --git a/src/init.cpp b/src/init.cpp
index b37552d407..a60e08a980 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -268,10 +268,9 @@ void Shutdown(NodeContext& node)
StopTorControl();
// After everything has been shut down, but before things get flushed, stop the
- // CScheduler/checkqueue, scheduler and load block thread.
+ // scheduler and load block thread.
if (node.scheduler) node.scheduler->stop();
if (node.chainman && node.chainman->m_thread_load.joinable()) node.chainman->m_thread_load.join();
- if (node.chainman) node.chainman->StopScriptCheckWorkerThreads();
// After the threads that potentially access these pointers have been stopped,
// destruct and reset all to nullptr.
diff --git a/src/test/checkqueue_tests.cpp b/src/test/checkqueue_tests.cpp
index cb3831071a..9c2a5d1ae6 100644
--- a/src/test/checkqueue_tests.cpp
+++ b/src/test/checkqueue_tests.cpp
@@ -176,7 +176,6 @@ static void Correct_Queue_range(std::vector<size_t> range)
BOOST_REQUIRE(control.Wait());
BOOST_REQUIRE_EQUAL(FakeCheckCheckCompletion::n_calls, i);
}
- small_queue->StopWorkerThreads();
}
/** Test that 0 checks is correct
@@ -240,7 +239,6 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_Catches_Failure)
BOOST_REQUIRE(success);
}
}
- fail_queue->StopWorkerThreads();
}
// Test that a block validation which fails does not interfere with
// future blocks, ie, the bad state is cleared.
@@ -262,7 +260,6 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_Recovers_From_Failure)
BOOST_REQUIRE(r != end_fails);
}
}
- fail_queue->StopWorkerThreads();
}
// Test that unique checks are actually all called individually, rather than
@@ -294,7 +291,6 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_UniqueCheck)
}
BOOST_REQUIRE(r);
}
- queue->StopWorkerThreads();
}
@@ -325,7 +321,6 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_Memory)
}
BOOST_REQUIRE_EQUAL(MemoryCheck::fake_allocated_memory, 0U);
}
- queue->StopWorkerThreads();
}
// Test that a new verification cannot occur until all checks
@@ -361,7 +356,6 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_FrozenCleanup)
// Wait for control to finish
t0.join();
BOOST_REQUIRE(!fails);
- queue->StopWorkerThreads();
}
diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp
index a4c0db8aea..830cfeb25a 100644
--- a/src/test/transaction_tests.cpp
+++ b/src/test/transaction_tests.cpp
@@ -553,7 +553,6 @@ BOOST_AUTO_TEST_CASE(test_big_witness_transaction)
bool controlCheck = control.Wait();
assert(controlCheck);
- scriptcheckqueue.StopWorkerThreads();
}
SignatureData CombineSignatures(const CMutableTransaction& input1, const CMutableTransaction& input2, const CTransactionRef tx)
diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp
index f14f13fdda..0124d85580 100644
--- a/src/test/util/setup_common.cpp
+++ b/src/test/util/setup_common.cpp
@@ -193,7 +193,6 @@ ChainTestingSetup::ChainTestingSetup(const ChainType chainType, const std::vecto
ChainTestingSetup::~ChainTestingSetup()
{
if (m_node.scheduler) m_node.scheduler->stop();
- m_node.chainman->StopScriptCheckWorkerThreads();
GetMainSignals().FlushBackgroundCallbacks();
GetMainSignals().UnregisterBackgroundSignalScheduler();
m_node.connman.reset();
diff --git a/src/validation.cpp b/src/validation.cpp
index f744126c9f..91027872b0 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -2047,11 +2047,6 @@ DisconnectResult Chainstate::DisconnectBlock(const CBlock& block, const CBlockIn
return fClean ? DISCONNECT_OK : DISCONNECT_UNCLEAN;
}
-void ChainstateManager::StopScriptCheckWorkerThreads()
-{
- m_script_check_queue.StopWorkerThreads();
-}
-
/**
* Threshold condition checker that triggers when unknown versionbits are seen on the network.
*/
@@ -5754,8 +5749,6 @@ ChainstateManager::ChainstateManager(const util::SignalInterrupt& interrupt, Opt
ChainstateManager::~ChainstateManager()
{
- StopScriptCheckWorkerThreads();
-
LOCK(::cs_main);
m_versionbitscache.Clear();
diff --git a/src/validation.h b/src/validation.h
index 5fc4efae14..aacc9b828f 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -1246,7 +1246,6 @@ public:
std::optional<int> GetSnapshotBaseHeight() const EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
CCheckQueue<CScriptCheck>& GetCheckQueue() { return m_script_check_queue; }
- void StopScriptCheckWorkerThreads();
~ChainstateManager();
};