Skip to content

Commit

Permalink
Avoid potential false positive in DeadlockDetector.
Browse files Browse the repository at this point in the history
  • Loading branch information
greyson-signal committed Jul 5, 2022
1 parent f441b3d commit a3802d0
Showing 1 changed file with 11 additions and 1 deletion.
Expand Up @@ -40,7 +40,7 @@ class DeadlockDetector(private val handler: Handler, private val pollingInterval
val thread: Thread = entry.key
val stack: Array<StackTraceElement> = entry.value

thread.state == Thread.State.BLOCKED || (waitingStates.contains(thread.state) && stack.any { it.methodName.startsWith("lock") || it.methodName.startsWith("waitForConnection") })
thread.state == Thread.State.BLOCKED || (thread.state.isWaiting() && stack.hasPotentialLock())
}
.filter { entry -> !BLOCK_BLOCKLIST.contains(entry.key.name) }

Expand Down Expand Up @@ -93,6 +93,16 @@ class DeadlockDetector(private val handler: Handler, private val pollingInterval
val namePrefix: String
)

private fun Thread.State.isWaiting(): Boolean {
return waitingStates.contains(this)
}

private fun Array<StackTraceElement>.hasPotentialLock(): Boolean {
return any {
it.methodName.startsWith("lock") || (it.methodName.startsWith("waitForConnection") && it.className.contains("IncomingMessageObserver"))
}
}

companion object {
private val TAG = Log.tag(DeadlockDetector::class.java)

Expand Down

0 comments on commit a3802d0

Please sign in to comment.