3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-07 23:03:04 +00:00

Make the use of cycle detecting locks optional at compile time.

This commit is contained in:
Mike Hearn 2013-03-06 13:51:27 +01:00
parent 97bce595c3
commit f7fa0cda72

View File

@ -37,8 +37,8 @@ import static com.google.common.base.Preconditions.checkArgument;
* To enable debug logging from the library, run with -Dbitcoinj.logging=true on your command line. * To enable debug logging from the library, run with -Dbitcoinj.logging=true on your command line.
*/ */
public class Utils { public class Utils {
private static CycleDetectingLockFactory lockFactory = CycleDetectingLockFactory.newInstance(CycleDetectingLockFactory.Policies.THROW); private static final CycleDetectingLockFactory cycleDetectingLockFactory;
private static MessageDigest digest; private static final MessageDigest digest;
static { static {
try { try {
@ -46,12 +46,18 @@ public class Utils {
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e); // Can't happen. throw new RuntimeException(e); // Can't happen.
} }
cycleDetectingLockFactory = CycleDetectingLockFactory.newInstance(CycleDetectingLockFactory.Policies.WARN);
} }
private static final boolean detectLockCycles = true;
/** Returns a cycle detecting re-entrant named lock. */ /** Returns a re-entrant lock that may be cycle detecting, depending on {@link Utils#detectLockCycles}. */
public static ReentrantLock lock(String name) { public static ReentrantLock lock(String name) {
return lockFactory.newReentrantLock(name); if (detectLockCycles)
return cycleDetectingLockFactory.newReentrantLock(name);
else
return new ReentrantLock();
} }
/** The string that prefixes all text messages signed using Bitcoin keys. */ /** The string that prefixes all text messages signed using Bitcoin keys. */
@ -376,7 +382,7 @@ public class Utils {
* MPI encoded numbers are produced by the OpenSSL BN_bn2mpi function. They consist of * MPI encoded numbers are produced by the OpenSSL BN_bn2mpi function. They consist of
* a 4 byte big endian length field, followed by the stated number of bytes representing * a 4 byte big endian length field, followed by the stated number of bytes representing
* the number in big endian format (with a sign bit). * the number in big endian format (with a sign bit).
* @param hasLength indicates whether the 4 byte length field should be included * @param includeLength indicates whether the 4 byte length field should be included
*/ */
static byte[] encodeMPI(BigInteger value, boolean includeLength) { static byte[] encodeMPI(BigInteger value, boolean includeLength) {
if (value.equals(BigInteger.ZERO)) { if (value.equals(BigInteger.ZERO)) {
@ -473,7 +479,7 @@ public class Utils {
} }
public static boolean isWindows() { public static boolean isWindows() {
return System.getProperty("os.name").toLowerCase().indexOf("win") >= 0; return System.getProperty("os.name").toLowerCase().contains("win");
} }
/** /**