diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-01-27 17:02:19 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-01-27 17:02:19 +0000 |
commit | 2cbc6976429f2e616eacb3e67e90416ddcf1f6fe (patch) | |
tree | 55f0fa93fa0919ad4602451d50979943c38f9f05 /searchcore | |
parent | 767d89a32167f8684bcb905bbd83374bba37d4e6 (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.cpp | 18 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h | 2 |
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; } |