diff --git a/core/src/main/java/com/google/bitcoin/utils/Locks.java b/core/src/main/java/com/google/bitcoin/utils/Locks.java index 3c684b20..f6bcd3d4 100644 --- a/core/src/main/java/com/google/bitcoin/utils/Locks.java +++ b/core/src/main/java/com/google/bitcoin/utils/Locks.java @@ -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; } } diff --git a/core/src/test/java/com/google/bitcoin/core/WalletTest.java b/core/src/test/java/com/google/bitcoin/core/WalletTest.java index 83c4f3fa..99bf098b 100644 --- a/core/src/test/java/com/google/bitcoin/core/WalletTest.java +++ b/core/src/test/java/com/google/bitcoin/core/WalletTest.java @@ -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