summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-01-27 17:02:19 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-01-27 17:02:19 +0000
commit2cbc6976429f2e616eacb3e67e90416ddcf1f6fe (patch)
tree55f0fa93fa0919ad4602451d50979943c38f9f05 /searchcore
parent767d89a32167f8684bcb905bbd83374bba37d4e6 (diff)
Check _stopped in execute, and guard it by the lock.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp18
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h2
2 files changed, 13 insertions, 7 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp
index ee2cb741991..9ad0921c342 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp
@@ -19,16 +19,19 @@ MaintenanceJobRunner::run()
addExecutorTask();
}
+void
+MaintenanceJobRunner::stop() {
+ Guard guard(_lock);
+ _stopped = true;
+}
void
MaintenanceJobRunner::addExecutorTask()
{
- if (!_stopped && !_job->isBlocked()) {
- Guard guard(_lock);
- if (!_queued) {
- _queued = true;
- _executor.execute(makeLambdaTask([this]() { runJobInExecutor(); }));
- }
+ Guard guard(_lock);
+ if (!_stopped && !_job->isBlocked() && !_queued) {
+ _queued = true;
+ _executor.execute(makeLambdaTask([this]() { runJobInExecutor(); }));
}
}
@@ -38,6 +41,9 @@ MaintenanceJobRunner::runJobInExecutor()
{
Guard guard(_lock);
_queued = false;
+ if (_stopped) {
+ return;
+ }
_running = true;
}
bool finished = _job->run();
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h
index a855c65d023..dc13cdfc7d9 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h
@@ -30,7 +30,7 @@ public:
MaintenanceJobRunner(vespalib::Executor &executor, IMaintenanceJob::UP job);
void run() override;
- void stop() { _stopped = true; }
+ void stop();
bool isRunning() const;
const vespalib::Executor & getExecutor() const { return _executor; }
const IMaintenanceJob &getJob() const { return *_job; }