summaryrefslogtreecommitdiff
path: root/src/mongo/db/ops
diff options
context:
space:
mode:
authorXiangyu Yao <xiangyu.yao@mongodb.com>2019-04-11 17:49:57 -0400
committerXiangyu Yao <xiangyu.yao@mongodb.com>2019-04-18 14:51:28 -0400
commit5ad20825e2c02b14f1aeb5bfb4dcc0b4dce927b2 (patch)
tree2f9e7c1d16b7c0fb03b57d88f2aceefc00bd4c16 /src/mongo/db/ops
parentb53170282d1e314549350d7124830a2457bad5d6 (diff)
downloadmongo-5ad20825e2c02b14f1aeb5bfb4dcc0b4dce927b2.tar.gz
SERVER-39516 Use database MODE_IX lock for creating collection
Diffstat (limited to 'src/mongo/db/ops')
-rw-r--r--src/mongo/db/ops/write_ops_exec.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/mongo/db/ops/write_ops_exec.cpp b/src/mongo/db/ops/write_ops_exec.cpp
index a39b60aa903..b9f1f8bd006 100644
--- a/src/mongo/db/ops/write_ops_exec.cpp
+++ b/src/mongo/db/ops/write_ops_exec.cpp
@@ -208,7 +208,9 @@ void makeCollection(OperationContext* opCtx, const NamespaceString& ns) {
!inTransaction);
writeConflictRetry(opCtx, "implicit collection creation", ns.ns(), [&opCtx, &ns] {
- AutoGetOrCreateDb db(opCtx, ns.db(), MODE_X);
+ AutoGetOrCreateDb db(opCtx, ns.db(), MODE_IX);
+ Lock::CollectionLock collLock(opCtx, ns, MODE_X);
+
assertCanWrite_inlock(opCtx, ns);
if (!db.getDb()->getCollection(opCtx, ns)) { // someone else may have beat us to it.
uassertStatusOK(userAllowedCreateNS(ns.db(), ns.coll()));