Merge "Properly clean up broadcast-receiver ANR" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
9f9ee61cf6
@@ -1445,20 +1445,19 @@ public final class BroadcastQueue {
|
|||||||
r.receiverTime = now;
|
r.receiverTime = now;
|
||||||
r.anrCount++;
|
r.anrCount++;
|
||||||
|
|
||||||
// Current receiver has passed its expiration date.
|
|
||||||
if (r.nextReceiver <= 0) {
|
|
||||||
Slog.w(TAG, "Timeout on receiver with nextReceiver <= 0");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcessRecord app = null;
|
ProcessRecord app = null;
|
||||||
String anrMessage = null;
|
String anrMessage = null;
|
||||||
|
|
||||||
Object curReceiver = r.receivers.get(r.nextReceiver-1);
|
Object curReceiver;
|
||||||
r.delivery[r.nextReceiver-1] = BroadcastRecord.DELIVERY_TIMEOUT;
|
if (r.nextReceiver > 0) {
|
||||||
Slog.w(TAG, "Receiver during timeout: " + curReceiver);
|
curReceiver = r.receivers.get(r.nextReceiver-1);
|
||||||
|
r.delivery[r.nextReceiver-1] = BroadcastRecord.DELIVERY_TIMEOUT;
|
||||||
|
} else {
|
||||||
|
curReceiver = r.curReceiver;
|
||||||
|
}
|
||||||
|
Slog.w(TAG, "Receiver during timeout of " + r + " : " + curReceiver);
|
||||||
logBroadcastReceiverDiscardLocked(r);
|
logBroadcastReceiverDiscardLocked(r);
|
||||||
if (curReceiver instanceof BroadcastFilter) {
|
if (curReceiver != null && curReceiver instanceof BroadcastFilter) {
|
||||||
BroadcastFilter bf = (BroadcastFilter)curReceiver;
|
BroadcastFilter bf = (BroadcastFilter)curReceiver;
|
||||||
if (bf.receiverList.pid != 0
|
if (bf.receiverList.pid != 0
|
||||||
&& bf.receiverList.pid != ActivityManagerService.MY_PID) {
|
&& bf.receiverList.pid != ActivityManagerService.MY_PID) {
|
||||||
|
|||||||
Reference in New Issue
Block a user