diff --git a/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt b/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt index 43fd2b2a3b..2921a9b997 100644 --- a/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt +++ b/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt @@ -27,12 +27,15 @@ class DeadlockDetector(private val handler: Handler, private val pollingInterval private fun poll() { val threads: Map> = Thread.getAllStackTraces() - val blocked: Map> = threads.filter { entry -> - val thread: Thread = entry.key - val stack: Array = entry.value + val blocked: Map> = threads + .filter { entry -> + val thread: Thread = entry.key + val stack: Array = entry.value + + thread.state == Thread.State.BLOCKED || (thread.state == Thread.State.WAITING && stack.any { it.methodName.startsWith("lock") }) + } + .filter { entry -> !BLOCK_BLACKLIST.contains(entry.key.name) } - thread.state == Thread.State.BLOCKED || (thread.state == Thread.State.WAITING && stack.any { it.methodName.startsWith("lock") }) - } val blockedIds: Set = blocked.keys.map(Thread::getId).toSet() val stillBlocked: Set = blockedIds.intersect(previouslyBlocked) @@ -93,6 +96,8 @@ class DeadlockDetector(private val handler: Handler, private val pollingInterval private const val CONCERNING_QUEUE_THRESHOLD = 4 + private val BLOCK_BLACKLIST = setOf("HeapTaskDaemon") + private fun buildLogString(description: String, blocked: Map>): String { val stringBuilder = StringBuilder() stringBuilder.append(description).append("\n")