Avoid potential false positive in DeadlockDetector.

fork-5.53.8
Greyson Parrelli 2022-07-05 10:38:21 -04:00
rodzic f441b3d0f1
commit a3802d0af0
1 zmienionych plików z 11 dodań i 1 usunięć

Wyświetl plik

@ -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) }
@ -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)