diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-12 10:06:32 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-12 10:06:32 +0000 |
commit | ef5b81cb74fcd07649182745416ad3cf78e36017 (patch) | |
tree | c6d8aa8f01285ed315f456e634f9b9c63bf04001 /searchcore | |
parent | 8dc926818cdddde34fb287b215203dde02216f8d (diff) |
Check if job has been stopped before posting to master executor to reduce risk for accesing freed memory after documentdb have been shutdown.
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp | 2 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp index f0847ff051e..34167933356 100644 --- a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp @@ -181,6 +181,7 @@ private: void BucketMoveJobV2::failOperation(std::shared_ptr<BucketMoveJobV2> job, BucketId bucketId) { auto & master = job->_master; + if (job->_stopped) return; master.execute(makeLambdaTask([job=std::move(job), bucketId]() { if (job->_stopped.load(std::memory_order_relaxed)) return; job->considerBucket(job->_ready.meta_store()->getBucketDB().takeGuard(), bucketId); @@ -205,6 +206,7 @@ BucketMoveJobV2::prepareMove(std::shared_ptr<BucketMoveJobV2> job, BucketMoverSP { auto moveOps = mover->createMoveOperations(std::move(keys)); auto & master = job->_master; + if (job->_stopped) return; master.execute(makeLambdaTask([job=std::move(job), mover=std::move(mover), moveOps=std::move(moveOps), onDone=std::move(onDone)]() mutable { if (job->_stopped.load(std::memory_order_relaxed)) return; job->completeMove(std::move(mover), std::move(moveOps), std::move(onDone)); diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp index 52fd18cd971..db83862ba90 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp @@ -50,6 +50,7 @@ public: void fail(const Bucket & bucket) override { assert(bucket.getBucketId() == _meta.bucketId); auto & master = _job->_master; + if (_job->_stopped) return; master.execute(makeLambdaTask([job=std::move(_job)] { job->_scanItr.reset(); })); } private: @@ -86,6 +87,7 @@ CompactionJob::moveDocument(std::shared_ptr<CompactionJob> job, const search::Do if (metaThen.gid != op->getDocument()->getId().getGlobalId()) return; auto & master = job->_master; + if (job->_stopped) return; master.execute(makeLambdaTask([self=std::move(job), meta=metaThen, moveOp=std::move(op), onDone=std::move(context)]() mutable { if (self->_stopped.load(std::memory_order_relaxed)) return; self->completeMove(meta, std::move(moveOp), std::move(onDone)); |