diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-06-05 09:46:25 -0400 |
---|---|---|
committer | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-06-06 14:27:03 -0400 |
commit | 0a98a55f040de45dbf5e48968752c7053cd8acb9 (patch) | |
tree | b10344449e2939b32ed55e6e5e914435d152fcf7 /src/mongo/db/catalog | |
parent | fbb3e0b7299d0b14ebff5641b3a6c672c18ad96d (diff) | |
download | mongo-0a98a55f040de45dbf5e48968752c7053cd8acb9.tar.gz |
SERVER-41141 Release the mutex early in IndexBuildsManager::interruptIndexBuild() and IndexBuildsManager::abortIndexBuild() after getting a shared_ptr to the MultiIndexBlock to avoid a deadlock with index builds being aborted during server shutdown
Diffstat (limited to 'src/mongo/db/catalog')
-rw-r--r-- | src/mongo/db/catalog/index_builds_manager.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/mongo/db/catalog/index_builds_manager.cpp b/src/mongo/db/catalog/index_builds_manager.cpp index 67bbcb94059..91bc573605e 100644 --- a/src/mongo/db/catalog/index_builds_manager.cpp +++ b/src/mongo/db/catalog/index_builds_manager.cpp @@ -263,7 +263,11 @@ bool IndexBuildsManager::abortIndexBuild(const UUID& buildUUID, const std::strin if (builderIt == _builders.end()) { return false; } - builderIt->second->abort(reason); + + std::shared_ptr<MultiIndexBlock> builder = builderIt->second; + + lk.unlock(); + builder->abort(reason); return true; } @@ -278,7 +282,10 @@ bool IndexBuildsManager::interruptIndexBuild(OperationContext* opCtx, } log() << "Index build interrupted: " << buildUUID << ": " << reason; - builderIt->second->abortWithoutCleanup(opCtx); + std::shared_ptr<MultiIndexBlock> builder = builderIt->second; + + lk.unlock(); + builder->abortWithoutCleanup(opCtx); return true; } |