summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2011-05-26 21:25:47 -0400
committerEliot Horowitz <eliot@10gen.com>2011-05-26 21:25:47 -0400
commita23295b084353800481caf00c92bea1ec024b664 (patch)
tree6d269d7d6aaed5b60fce8ac74ba0e1e443a346a6
parent47840f05d29a3e63a402740e5914f2c803f3bda1 (diff)
downloadmongo-a23295b084353800481caf00c92bea1ec024b664.tar.gz
fix spinlock deadlock
Conflicts: s/d_migrate.cpp
-rw-r--r--s/d_migrate.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/s/d_migrate.cpp b/s/d_migrate.cpp
index ff4842ed869..df12e54b962 100644
--- a/s/d_migrate.cpp
+++ b/s/d_migrate.cpp
@@ -450,8 +450,6 @@ namespace mongo {
maxRecsWhenFull = numeric_limits<long long>::max();
}
- scoped_spinlock lk( _trackerLocks );
-
// do a full traversal of the chunk and don't stop even if we think it is a large chunk
// we want the number of records to better report, in that case
bool isLargeChunk = false;
@@ -459,6 +457,7 @@ namespace mongo {
while ( cc->ok() ) {
DiskLoc dl = cc->currLoc();
if ( ! isLargeChunk ) {
+ scoped_spinlock lk( _trackerLocks );
_cloneLocs.insert( dl );
}
cc->advance();
@@ -485,7 +484,10 @@ namespace mongo {
return false;
}
- log() << "moveChunk number of documents: " << _cloneLocs.size() << endl;
+ {
+ scoped_spinlock lk( _trackerLocks );
+ log() << "moveChunk number of documents: " << _cloneLocs.size() << endl;
+ }
return true;
}