From d161488572c1248d28161e2591c951372e206c7e Mon Sep 17 00:00:00 2001 From: HashEngineering Date: Mon, 8 Apr 2024 08:16:45 -0700 Subject: [PATCH] feat: support deadlock detection on android (#250) --- core/src/main/java/org/bitcoinj/evolution/QuorumState.java | 1 + core/src/main/java/org/bitcoinj/utils/Threading.java | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/bitcoinj/evolution/QuorumState.java b/core/src/main/java/org/bitcoinj/evolution/QuorumState.java index 4ca4ff96be..44e5e5c198 100644 --- a/core/src/main/java/org/bitcoinj/evolution/QuorumState.java +++ b/core/src/main/java/org/bitcoinj/evolution/QuorumState.java @@ -267,6 +267,7 @@ public void processDiff(@Nullable Peer peer, SimplifiedMasternodeListDiff mnlist lock.lock(); try { + log.info("lock acquired when processing mnlistdiff"); applyDiff(peer, blockChain, mnlistdiff, isLoadingBootStrap); log.info(this.toString()); diff --git a/core/src/main/java/org/bitcoinj/utils/Threading.java b/core/src/main/java/org/bitcoinj/utils/Threading.java index 987de2cc90..d3d4091c69 100644 --- a/core/src/main/java/org/bitcoinj/utils/Threading.java +++ b/core/src/main/java/org/bitcoinj/utils/Threading.java @@ -149,14 +149,19 @@ public void execute(@Nonnull Runnable runnable) { private static CycleDetectingLockFactory.Policy policy; public static CycleDetectingLockFactory factory; + private static boolean useDefaultAndroidPolicy = true; public static ReentrantLock lock(String name) { - if (Utils.isAndroidRuntime()) + if (Utils.isAndroidRuntime() && useDefaultAndroidPolicy) return new ReentrantLock(true); else return factory.newReentrantLock(name); } + public static void setUseDefaultAndroidPolicy(boolean use) { + useDefaultAndroidPolicy = use; + } + public static void warnOnLockCycles() { setPolicy(CycleDetectingLockFactory.Policies.WARN); }