3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-12 18:25:51 +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();
}
public static CycleDetectingLockFactory factory = null;
private static CycleDetectingLockFactory.Policy policy;
public static CycleDetectingLockFactory factory;
public static ReentrantLock lock(String name) {
if (factory != null)
return factory.newReentrantLock(name);
else
return new ReentrantLock();
return factory.newReentrantLock(name);
}
public static void warnOnLockCycles() {
factory = CycleDetectingLockFactory.newInstance(CycleDetectingLockFactory.Policies.WARN);
setPolicy(CycleDetectingLockFactory.Policies.WARN);
}
public static void throwOnLockCycles() {
factory = CycleDetectingLockFactory.newInstance(CycleDetectingLockFactory.Policies.THROW);
setPolicy(CycleDetectingLockFactory.Policies.THROW);
}
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
public void lockCycles() {
CycleDetectingLockFactory.Policy oldPolicy = Locks.getPolicy();
Locks.throwOnLockCycles();
final ReentrantLock lock = Locks.lock("test");
wallet = new Wallet(params);
lock.lock();
int foo = wallet.getKeychainSize();
wallet.getKeychainSize();
lock.unlock();
// Now make sure if we invert the lock, we get an exception.
wallet.addEventListener(new AbstractWalletEventListener() {
@ -937,6 +938,7 @@ public class WalletTest {
}
});
wallet.addKey(new ECKey());
Locks.setPolicy(oldPolicy);
}
// There is a test for spending a coinbase transaction as it matures in BlockChainTest#coinbaseTransactionAvailability