kopia lustrzana https://github.com/ryukoposting/Signal-Android
Avoid potential false positive in DeadlockDetector.
rodzic
f441b3d0f1
commit
a3802d0af0
|
@ -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)
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue