Backed out changeset 7b0acef284ad (bug 1313489)

This commit is contained in:
Sebastian Hengst 2016-11-09 21:10:06 +01:00
parent 9341b600b5
commit e4f364202e

View File

@ -10,7 +10,7 @@
#include "TestHarness.h"
#include "nsIMemoryReporter.h"
#include "mozilla/Mutex.h"
//#define OLD_API
#define PASS() \
do { \
@ -24,6 +24,19 @@
return NS_ERROR_FAILURE; \
} while (0)
#ifdef OLD_API
# include "nsAutoLock.h"
typedef PRLock* moz_lock_t;
# define NEWLOCK(n) nsAutoLock::NewLock(n)
# define DELETELOCK(v) nsAutoLock::DestroyLock(v)
# define AUTOLOCK(v, l) nsAutoLock v(l)
#else
# include "mozilla/Mutex.h"
typedef mozilla::Mutex* moz_lock_t;
# define NEWLOCK(n) new mozilla::Mutex(n)
# define DELETELOCK(v) delete (v)
# define AUTOLOCK(v, l) mozilla::MutexAutoLock v(*l)
#endif
// def/undef these to run particular tests.
#undef DD_TEST1
@ -41,12 +54,12 @@ AllocLockRecurseUnlockFree(int i)
if (0 == i)
return;
mozilla::Mutex* lock = new mozilla::Mutex("deadlockDetector.scalability.t1");
moz_lock_t lock = NEWLOCK("deadlockDetector.scalability.t1");
{
mozilla::MutexAutoLock _(*lock);
AUTOLOCK(_, lock);
AllocLockRecurseUnlockFree(i - 1);
}
delete lock;
DELETELOCK(lock);
}
// This test creates a resource dependency chain N elements long, then
@ -69,30 +82,30 @@ LengthNDepChain(int N)
static nsresult
OneLockNDeps(const int N, const int K)
{
mozilla::Mutex* lock = new mozilla::Mutex("deadlockDetector.scalability.t2.master");
mozilla::Mutex** locks = new mozilla::Mutex*[N];
moz_lock_t lock = NEWLOCK("deadlockDetector.scalability.t2.master");
moz_lock_t* locks = new moz_lock_t[N];
if (!locks)
NS_RUNTIMEABORT("couldn't allocate lock array");
for (int i = 0; i < N; ++i)
locks[i] =
new mozilla::Mutex("deadlockDetector.scalability.t2.dep");
NEWLOCK("deadlockDetector.scalability.t2.dep");
// establish orders
{mozilla::MutexAutoLock m(*lock);
{AUTOLOCK(m, lock);
for (int i = 0; i < N; ++i)
mozilla::MutexAutoLock s(*locks[i]);
AUTOLOCK(s, locks[i]);
}
// exercise order check
{mozilla::MutexAutoLock m(*lock);
{AUTOLOCK(m, lock);
for (int i = 0; i < K; ++i)
for (int j = 0; j < N; ++j)
mozilla::MutexAutoLock s(*locks[i]);
AUTOLOCK(s, locks[i]);
}
for (int i = 0; i < N; ++i)
delete locks[i];
DELETELOCK(locks[i]);
delete[] locks;
PASS();
@ -114,29 +127,29 @@ OneLockNDeps(const int N, const int K)
static nsresult
MaxDepsNsq(const int N, const int K)
{
mozilla::Mutex** locks = new mozilla::Mutex*[N];
moz_lock_t* locks = new moz_lock_t[N];
if (!locks)
NS_RUNTIMEABORT("couldn't allocate lock array");
for (int i = 0; i < N; ++i)
locks[i] = new mozilla::Mutex("deadlockDetector.scalability.t3");
locks[i] = NEWLOCK("deadlockDetector.scalability.t3");
for (int i = 0; i < N; ++i) {
mozilla::MutexAutoLock al1(*locks[i]);
AUTOLOCK(al1, locks[i]);
for (int j = i+1; j < N; ++j)
mozilla::MutexAutoLock al2(*locks[j]);
AUTOLOCK(al2, locks[j]);
}
for (int i = 0; i < K; ++i) {
for (int j = 0; j < N; ++j) {
mozilla::MutexAutoLock al1(*locks[j]);
AUTOLOCK(al1, locks[j]);
for (int k = j+1; k < N; ++k)
mozilla::MutexAutoLock al2(*locks[k]);
AUTOLOCK(al2, locks[k]);
}
}
for (int i = 0; i < N; ++i)
delete locks[i];
DELETELOCK(locks[i]);
delete[] locks;
PASS();
@ -156,25 +169,25 @@ static nsresult
OneLockNDepsUsedSeveralTimes(const size_t N, const size_t K)
{
// Create master lock.
mozilla::Mutex* lock_1 = new mozilla::Mutex("deadlockDetector.scalability.t4.master");
moz_lock_t lock_1 = NEWLOCK("deadlockDetector.scalability.t4.master");
for (size_t n = 0; n < N; n++) {
// Create child lock.
mozilla::Mutex* lock_2 = new mozilla::Mutex("deadlockDetector.scalability.t4.child");
moz_lock_t lock_2 = NEWLOCK("deadlockDetector.scalability.t4.child");
// First lock the master.
mozilla::MutexAutoLock m(*lock_1);
AUTOLOCK(m, lock_1);
// Now lock and unlock the child a few times.
for (size_t k = 0; k < K; k++) {
mozilla::MutexAutoLock c(*lock_2);
AUTOLOCK(c, lock_2);
}
// Destroy the child lock.
delete lock_2;
DELETELOCK(lock_2);
}
// Cleanup the master lock.
delete lock_1;
DELETELOCK(lock_1);
PASS();
}