summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/database_holder.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2014-08-13 15:15:02 -0400
committerMathias Stearn <mathias@10gen.com>2014-08-20 13:57:04 -0400
commit562c8cb3faff5e9fc0acdc45db8dc2d498eb2000 (patch)
treeedc8cc4fe059aa932c4cecbb3bdf10f147457c3d /src/mongo/db/catalog/database_holder.cpp
parent081f11c248433f74806b7508555b212bc4ff0164 (diff)
downloadmongo-562c8cb3faff5e9fc0acdc45db8dc2d498eb2000.tar.gz
SERVER-13951 Better scoping for many WUOWs
Diffstat (limited to 'src/mongo/db/catalog/database_holder.cpp')
-rw-r--r--src/mongo/db/catalog/database_holder.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/mongo/db/catalog/database_holder.cpp b/src/mongo/db/catalog/database_holder.cpp
index fa12613c662..2498c72cd8c 100644
--- a/src/mongo/db/catalog/database_holder.cpp
+++ b/src/mongo/db/catalog/database_holder.cpp
@@ -117,12 +117,15 @@ namespace mongo {
// this locks _m for defensive checks, so we don't want to be locked right here :
StorageEngine* storageEngine = getGlobalEnvironment()->getGlobalStorageEngine();
invariant(storageEngine);
- DatabaseCatalogEntry* entry = storageEngine->getDatabaseCatalogEntry( txn, dbname );
- invariant( entry );
- justCreated = !entry->exists();
- Database *db = new Database(txn,
- dbname,
- entry );
+ Database *db;
+ {
+ WriteUnitOfWork wunit(txn);
+ DatabaseCatalogEntry* entry = storageEngine->getDatabaseCatalogEntry(txn, dbname);
+ invariant(entry);
+ justCreated = !entry->exists();
+ db = new Database(txn, dbname, entry);
+ wunit.commit();
+ }
{
SimpleMutex::scoped_lock lk(_m);