summaryrefslogtreecommitdiff
path: root/src/mongo/db/concurrency/d_concurrency_test.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2014-10-27 16:35:27 -0400
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2014-10-29 16:35:12 -0400
commite192dc12571f5388a5005c3e71f6c1f497efa6ad (patch)
treee27b7167743985b7a662b27c6cf085047f95a6a6 /src/mongo/db/concurrency/d_concurrency_test.cpp
parented0947b4ca2c71f4c16fa38cc18a858249910b87 (diff)
downloadmongo-e192dc12571f5388a5005c3e71f6c1f497efa6ad.tar.gz
SERVER-15262/SERVER-15711 Flush thread should have precedence and discover deadlocks
Diffstat (limited to 'src/mongo/db/concurrency/d_concurrency_test.cpp')
-rw-r--r--src/mongo/db/concurrency/d_concurrency_test.cpp43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/mongo/db/concurrency/d_concurrency_test.cpp b/src/mongo/db/concurrency/d_concurrency_test.cpp
index 37d54f73fe9..a2f16d6f760 100644
--- a/src/mongo/db/concurrency/d_concurrency_test.cpp
+++ b/src/mongo/db/concurrency/d_concurrency_test.cpp
@@ -90,27 +90,46 @@ namespace mongo {
}
}
- TEST(DConcurrency, readlocktryTimeoutDueToFlushLock) {
+ TEST(DConcurrency, readlocktryNoTimeoutDueToFlushLockS) {
MMAPV1LockerImpl ls(1);
AutoAcquireFlushLockForMMAPV1Commit autoFlushLock(&ls);
- {
- MMAPV1LockerImpl lsTry(2);
- readlocktry lockTry(&lsTry, 1);
+ MMAPV1LockerImpl lsTry(2);
+ readlocktry lockTry(&lsTry, 1);
- ASSERT(!lockTry.got());
- }
+ ASSERT(lockTry.got());
}
- TEST(DConcurrency, writelocktryTimeoutDueToFlushLock) {
+ TEST(DConcurrency, writelocktryTimeoutDueToFlushLockS) {
MMAPV1LockerImpl ls(1);
AutoAcquireFlushLockForMMAPV1Commit autoFlushLock(&ls);
- {
- MMAPV1LockerImpl lsTry(2);
- writelocktry lockTry(&lsTry, 1);
- ASSERT(!lockTry.got());
- }
+ MMAPV1LockerImpl lsTry(2);
+ writelocktry lockTry(&lsTry, 1);
+
+ ASSERT(!lockTry.got());
+ }
+
+ TEST(DConcurrency, readlocktryTimeoutDueToFlushLockX) {
+ MMAPV1LockerImpl ls(1);
+ AutoAcquireFlushLockForMMAPV1Commit autoFlushLock(&ls);
+ autoFlushLock.upgradeFlushLockToExclusive();
+
+ MMAPV1LockerImpl lsTry(2);
+ readlocktry lockTry(&lsTry, 1);
+
+ ASSERT(!lockTry.got());
+ }
+
+ TEST(DConcurrency, writelocktryTimeoutDueToFlushLockX) {
+ MMAPV1LockerImpl ls(1);
+ AutoAcquireFlushLockForMMAPV1Commit autoFlushLock(&ls);
+ autoFlushLock.upgradeFlushLockToExclusive();
+
+ MMAPV1LockerImpl lsTry(2);
+ writelocktry lockTry(&lsTry, 1);
+
+ ASSERT(!lockTry.got());
}
TEST(DConcurrency, TempReleaseGlobalWrite) {