Merge "Properly clean up broadcast-receiver ANR" into oc-mr1-dev

This commit is contained in:
TreeHugger Robot
2017-09-01 22:11:48 +00:00
committed by Android (Google) Code Review

View File

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