diff options
-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; } |