summaryrefslogtreecommitdiff
path: root/src/mongo/db/background.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2016-01-12 17:31:41 -0500
committerMathias Stearn <mathias@10gen.com>2016-01-14 14:18:44 -0500
commitd9e0595751bb1decc6c0de0a24d1cb4d09443451 (patch)
treec50f3528fd7535981862a75732087eea1fd5c7b2 /src/mongo/db/background.cpp
parent1fd3ccc79b31482afda983c0916f68e6b5adc0be (diff)
downloadmongo-d9e0595751bb1decc6c0de0a24d1cb4d09443451.tar.gz
SERVER-22160 Make statics for background.cpp immortal
This resolves static-initialization-order-fiasco problems with cursor_manager.cpp.
Diffstat (limited to 'src/mongo/db/background.cpp')
-rw-r--r--src/mongo/db/background.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mongo/db/background.cpp b/src/mongo/db/background.cpp
index 0eb45815723..306d966a01b 100644
--- a/src/mongo/db/background.cpp
+++ b/src/mongo/db/background.cpp
@@ -71,9 +71,10 @@ private:
typedef StringMap<std::shared_ptr<BgInfo>> BgInfoMap;
typedef BgInfoMap::const_iterator BgInfoMapIterator;
-stdx::mutex m;
-BgInfoMap dbsInProg;
-BgInfoMap nsInProg;
+// Static data for this file is never destroyed.
+stdx::mutex& m = *(new stdx::mutex());
+BgInfoMap& dbsInProg = *(new BgInfoMap());
+BgInfoMap& nsInProg = *(new BgInfoMap());
void BgInfo::recordBegin() {
++_opsInProgCount;
@@ -116,6 +117,7 @@ void awaitNoBgOps(stdx::unique_lock<stdx::mutex>& lk, BgInfoMap* bgiMap, StringD
}
} // namespace
+
bool BackgroundOperation::inProgForDb(StringData db) {
stdx::lock_guard<stdx::mutex> lk(m);
return dbsInProg.find(db) != dbsInProg.end();