Skip broadcasting to a receiver if the receiver seems to be dead
If an application that has a broadcast receiver is killed during broadcasting, thread variable of ProcessRecord becomes null so that IIntentReceiver#performReceive() is called in BroadcastQueue#performReceiveLocked(). But if binder driver has not noticed the death of the application yet, it can't throw DeadObjectException. After that, binder driver notices. But it can't notify DeadObjectException to the caller because performReceive() is async call. So broadcasting keeps on waiting for finishing performReceive() until timeout. This change checks the death of the application before calling performReceive() and skips broadcasting to the receiver if the application has already died. Change-Id: Ifa02b8b1a7e7b6fd314de90fedff5b7a5326825d
Loading
Please register or sign in to comment