diff options
author | Mathias Stearn <mathias@10gen.com> | 2016-01-12 17:31:41 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2016-01-14 14:18:44 -0500 |
commit | d9e0595751bb1decc6c0de0a24d1cb4d09443451 (patch) | |
tree | c50f3528fd7535981862a75732087eea1fd5c7b2 /src/mongo/db/background.cpp | |
parent | 1fd3ccc79b31482afda983c0916f68e6b5adc0be (diff) | |
download | mongo-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.cpp | 8 |
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(); |