summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-06-05 09:46:25 -0400
committerGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-06-06 14:27:03 -0400
commit0a98a55f040de45dbf5e48968752c7053cd8acb9 (patch)
treeb10344449e2939b32ed55e6e5e914435d152fcf7 /src/mongo/db/catalog
parentfbb3e0b7299d0b14ebff5641b3a6c672c18ad96d (diff)
downloadmongo-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.cpp11
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;
}