aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2020-05-28 08:43:25 -0400
committerMarcoFalke <falke.marco@gmail.com>2020-05-28 19:28:21 -0400
commitfac43f9889f500bcb62d830c030dec42fe791031 (patch)
tree143e5cfafa4a2850d16af163559c86da521c5e70
parentfa9cca0550f3d0ee8c276146f40007f76fbb97c2 (diff)
downloadbitcoin-fac43f9889f500bcb62d830c030dec42fe791031.tar.xz
scheduler: Replace stop(true) with StopWhenDrained()
This helps understanding the code at the call site without having to look up the name of the argument or the default value.
-rw-r--r--src/scheduler.cpp12
-rw-r--r--src/scheduler.h16
-rw-r--r--src/test/scheduler_tests.cpp6
3 files changed, 15 insertions, 19 deletions
diff --git a/src/scheduler.cpp b/src/scheduler.cpp
index 8f69bc31bf..c5d1788f77 100644
--- a/src/scheduler.cpp
+++ b/src/scheduler.cpp
@@ -68,18 +68,6 @@ void CScheduler::serviceQueue()
newTaskScheduled.notify_one();
}
-void CScheduler::stop(bool drain)
-{
- {
- LOCK(newTaskMutex);
- if (drain)
- stopWhenEmpty = true;
- else
- stopRequested = true;
- }
- newTaskScheduled.notify_all();
-}
-
void CScheduler::schedule(CScheduler::Function f, std::chrono::system_clock::time_point t)
{
{
diff --git a/src/scheduler.h b/src/scheduler.h
index 7ebe3df37f..63f20f1335 100644
--- a/src/scheduler.h
+++ b/src/scheduler.h
@@ -65,10 +65,18 @@ public:
// and interrupted using boost::interrupt_thread
void serviceQueue();
- // Tell any threads running serviceQueue to stop as soon as they're
- // done servicing whatever task they're currently servicing (drain=false)
- // or when there is no work left to be done (drain=true)
- void stop(bool drain=false);
+ /** Tell any threads running serviceQueue to stop as soon as the current task is done */
+ void stop()
+ {
+ WITH_LOCK(newTaskMutex, stopRequested = true);
+ newTaskScheduled.notify_all();
+ }
+ /** Tell any threads running serviceQueue to stop when there is no work left to be done */
+ void StopWhenDrained()
+ {
+ WITH_LOCK(newTaskMutex, stopWhenEmpty = true);
+ newTaskScheduled.notify_all();
+ }
// Returns number of tasks waiting to be serviced,
// and first and last task times
diff --git a/src/test/scheduler_tests.cpp b/src/test/scheduler_tests.cpp
index 1395a7f38c..eb03caacdd 100644
--- a/src/test/scheduler_tests.cpp
+++ b/src/test/scheduler_tests.cpp
@@ -89,7 +89,7 @@ BOOST_AUTO_TEST_CASE(manythreads)
}
// Drain the task queue then exit threads
- microTasks.stop(true);
+ microTasks.StopWhenDrained();
microThreads.join_all(); // ... wait until all the threads are done
int counterSum = 0;
@@ -155,7 +155,7 @@ BOOST_AUTO_TEST_CASE(singlethreadedscheduler_ordered)
}
// finish up
- scheduler.stop(true);
+ scheduler.StopWhenDrained();
threads.join_all();
BOOST_CHECK_EQUAL(counter1, 100);
@@ -186,7 +186,7 @@ BOOST_AUTO_TEST_CASE(mockforward)
scheduler.MockForward(std::chrono::minutes{5});
// ensure scheduler has chance to process all tasks queued for before 1 ms from now.
- scheduler.scheduleFromNow([&scheduler] { scheduler.stop(false); }, std::chrono::milliseconds{1});
+ scheduler.scheduleFromNow([&scheduler] { scheduler.stop(); }, std::chrono::milliseconds{1});
scheduler_thread.join();
// check that the queue only has one job remaining