diff options
author | Eric Milkie <milkie@10gen.com> | 2013-01-22 11:43:52 -0500 |
---|---|---|
committer | Eric Milkie <milkie@10gen.com> | 2013-01-22 11:43:52 -0500 |
commit | e351361ed10632a26ef8498e66014f746615b18d (patch) | |
tree | 1d6552c8dbd2caf5b7be058e5b00231897f263fd | |
parent | 8188ef72163de85f5a230e10e64a84c3fa606494 (diff) | |
download | mongo-e351361ed10632a26ef8498e66014f746615b18d.tar.gz |
SERVER-8266 fix deadlock between MongoFiles and DBRead lock
-rw-r--r-- | src/mongo/util/touch_pages.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/mongo/util/touch_pages.cpp b/src/mongo/util/touch_pages.cpp index 8e2d3ffd7ad..19ef0f1853c 100644 --- a/src/mongo/util/touch_pages.cpp +++ b/src/mongo/util/touch_pages.cpp @@ -18,6 +18,7 @@ #include "mongo/util/touch_pages.h" +#include <boost/scoped_ptr.h> #include <fcntl.h> #include <list> #include <string> @@ -39,9 +40,9 @@ namespace mongo { void touchNs( const std::string& ns ) { std::vector< touch_location > ranges; - Client::ReadContext ctx(ns); + boost::scoped_ptr<LockMongoFilesShared> mongoFilesLock; { - + Client::ReadContext ctx(ns); NamespaceDetails *nsd = nsdetails(ns); uassert( 16154, "namespace does not exist", nsd ); @@ -56,10 +57,10 @@ namespace mongo { ranges.push_back(tl); } - + mongoFilesLock.reset(new LockMongoFilesShared()); } - LockMongoFilesShared lk; - Lock::TempRelease tr; + // DB read lock is dropped; no longer needed after this point. + std::string progress_msg = "touch " + ns + " extents"; ProgressMeterHolder pm(cc().curop()->setMessage(progress_msg.c_str(), "Touch Progress", |