3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-13 02:35:52 +00:00

Some more tweaks to the Locks class.

This commit is contained in:
Mike Hearn 2013-03-07 15:36:07 +01:00
parent 9de6dca8c1
commit 9d87997736
2 changed files with 18 additions and 9 deletions

View File

@ -32,24 +32,31 @@ public class Locks {
warnOnLockCycles(); warnOnLockCycles();
} }
public static CycleDetectingLockFactory factory = null; private static CycleDetectingLockFactory.Policy policy;
public static CycleDetectingLockFactory factory;
public static ReentrantLock lock(String name) { public static ReentrantLock lock(String name) {
if (factory != null) return factory.newReentrantLock(name);
return factory.newReentrantLock(name);
else
return new ReentrantLock();
} }
public static void warnOnLockCycles() { public static void warnOnLockCycles() {
factory = CycleDetectingLockFactory.newInstance(CycleDetectingLockFactory.Policies.WARN); setPolicy(CycleDetectingLockFactory.Policies.WARN);
} }
public static void throwOnLockCycles() { public static void throwOnLockCycles() {
factory = CycleDetectingLockFactory.newInstance(CycleDetectingLockFactory.Policies.THROW); setPolicy(CycleDetectingLockFactory.Policies.THROW);
} }
public static void ignoreLockCycles() { public static void ignoreLockCycles() {
factory = null; setPolicy(CycleDetectingLockFactory.Policies.DISABLED);
}
public static void setPolicy(CycleDetectingLockFactory.Policy policy) {
Locks.policy = policy;
factory = CycleDetectingLockFactory.newInstance(policy);
}
public static CycleDetectingLockFactory.Policy getPolicy() {
return policy;
} }
} }

View File

@ -918,11 +918,12 @@ public class WalletTest {
@Test @Test
public void lockCycles() { public void lockCycles() {
CycleDetectingLockFactory.Policy oldPolicy = Locks.getPolicy();
Locks.throwOnLockCycles(); Locks.throwOnLockCycles();
final ReentrantLock lock = Locks.lock("test"); final ReentrantLock lock = Locks.lock("test");
wallet = new Wallet(params); wallet = new Wallet(params);
lock.lock(); lock.lock();
int foo = wallet.getKeychainSize(); wallet.getKeychainSize();
lock.unlock(); lock.unlock();
// Now make sure if we invert the lock, we get an exception. // Now make sure if we invert the lock, we get an exception.
wallet.addEventListener(new AbstractWalletEventListener() { wallet.addEventListener(new AbstractWalletEventListener() {
@ -937,6 +938,7 @@ public class WalletTest {
} }
}); });
wallet.addKey(new ECKey()); wallet.addKey(new ECKey());
Locks.setPolicy(oldPolicy);
} }
// There is a test for spending a coinbase transaction as it matures in BlockChainTest#coinbaseTransactionAvailability // There is a test for spending a coinbase transaction as it matures in BlockChainTest#coinbaseTransactionAvailability