aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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