File tree Expand file tree Collapse file tree 4 files changed +16
-13
lines changed Expand file tree Collapse file tree 4 files changed +16
-13
lines changed Original file line number Diff line number Diff line change @@ -143,7 +143,7 @@ void SingleThreadedSchedulerClient::MaybeScheduleProcessQueue()
143
143
if (m_are_callbacks_running) return ;
144
144
if (m_callbacks_pending.empty ()) return ;
145
145
}
146
- m_pscheduler-> schedule (std::bind (&SingleThreadedSchedulerClient::ProcessQueue, this ) , std::chrono::system_clock::now ());
146
+ m_scheduler. schedule ([ this ] { this -> ProcessQueue (); } , std::chrono::system_clock::now ());
147
147
}
148
148
149
149
void SingleThreadedSchedulerClient::ProcessQueue ()
@@ -179,8 +179,6 @@ void SingleThreadedSchedulerClient::ProcessQueue()
179
179
180
180
void SingleThreadedSchedulerClient::AddToProcessQueue (std::function<void ()> func)
181
181
{
182
- assert (m_pscheduler);
183
-
184
182
{
185
183
LOCK (m_callbacks_mutex);
186
184
m_callbacks_pending.emplace_back (std::move (func));
@@ -190,7 +188,7 @@ void SingleThreadedSchedulerClient::AddToProcessQueue(std::function<void()> func
190
188
191
189
void SingleThreadedSchedulerClient::EmptyQueue ()
192
190
{
193
- assert (!m_pscheduler-> AreThreadsServicingQueue ());
191
+ assert (!m_scheduler. AreThreadsServicingQueue ());
194
192
bool should_continue = true ;
195
193
while (should_continue) {
196
194
ProcessQueue ();
Original file line number Diff line number Diff line change 5
5
#ifndef BITCOIN_SCHEDULER_H
6
6
#define BITCOIN_SCHEDULER_H
7
7
8
+ #include < attributes.h>
9
+ #include < sync.h>
10
+ #include < threadsafety.h>
11
+
12
+ #include < chrono>
8
13
#include < condition_variable>
14
+ #include < cstddef>
9
15
#include < functional>
10
16
#include < list>
11
17
#include < map>
12
18
#include < thread>
13
-
14
- #include < sync.h>
19
+ #include < utility>
15
20
16
21
/* *
17
22
* Simple class for background tasks that should be run
@@ -117,7 +122,7 @@ class CScheduler
117
122
class SingleThreadedSchedulerClient
118
123
{
119
124
private:
120
- CScheduler* m_pscheduler ;
125
+ CScheduler& m_scheduler ;
121
126
122
127
Mutex m_callbacks_mutex;
123
128
std::list<std::function<void ()>> m_callbacks_pending GUARDED_BY (m_callbacks_mutex);
@@ -127,7 +132,7 @@ class SingleThreadedSchedulerClient
127
132
void ProcessQueue ();
128
133
129
134
public:
130
- explicit SingleThreadedSchedulerClient (CScheduler* pschedulerIn ) : m_pscheduler(pschedulerIn) {}
135
+ explicit SingleThreadedSchedulerClient (CScheduler& scheduler LIFETIMEBOUND ) : m_scheduler{scheduler} {}
131
136
132
137
/* *
133
138
* Add a callback to be executed. Callbacks are executed serially
Original file line number Diff line number Diff line change @@ -128,16 +128,16 @@ BOOST_AUTO_TEST_CASE(singlethreadedscheduler_ordered)
128
128
CScheduler scheduler;
129
129
130
130
// each queue should be well ordered with respect to itself but not other queues
131
- SingleThreadedSchedulerClient queue1 (& scheduler);
132
- SingleThreadedSchedulerClient queue2 (& scheduler);
131
+ SingleThreadedSchedulerClient queue1 (scheduler);
132
+ SingleThreadedSchedulerClient queue2 (scheduler);
133
133
134
134
// create more threads than queues
135
135
// if the queues only permit execution of one task at once then
136
136
// the extra threads should effectively be doing nothing
137
137
// if they don't we'll get out of order behaviour
138
138
std::vector<std::thread> threads;
139
139
for (int i = 0 ; i < 5 ; ++i) {
140
- threads.emplace_back (std::bind (&CScheduler::serviceQueue, & scheduler) );
140
+ threads.emplace_back ([&] { scheduler. serviceQueue (); } );
141
141
}
142
142
143
143
// these are not atomic, if SinglethreadedSchedulerClient prevents
Original file line number Diff line number Diff line change @@ -40,7 +40,7 @@ struct MainSignalsInstance {
40
40
// our own queue here :(
41
41
SingleThreadedSchedulerClient m_schedulerClient;
42
42
43
- explicit MainSignalsInstance (CScheduler *pscheduler ) : m_schedulerClient(pscheduler ) {}
43
+ explicit MainSignalsInstance (CScheduler& scheduler LIFETIMEBOUND ) : m_schedulerClient(scheduler ) {}
44
44
45
45
void Register (std::shared_ptr<CValidationInterface> callbacks)
46
46
{
@@ -92,7 +92,7 @@ static CMainSignals g_signals;
92
92
void CMainSignals::RegisterBackgroundSignalScheduler (CScheduler& scheduler)
93
93
{
94
94
assert (!m_internals);
95
- m_internals. reset ( new MainSignalsInstance (& scheduler) );
95
+ m_internals = std::make_unique< MainSignalsInstance>( scheduler);
96
96
}
97
97
98
98
void CMainSignals::UnregisterBackgroundSignalScheduler ()
You can’t perform that action at this time.
0 commit comments