Merge "Don't assume r.curApp is valid when finalizing broadcasts" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
33e8dc7978
@@ -470,22 +470,23 @@ public final class BroadcastQueue {
|
||||
// if this receiver was slow, impose deferral policy on the app. This will kick in
|
||||
// when processNextBroadcastLocked() next finds this uid as a receiver identity.
|
||||
if (!r.timeoutExempt) {
|
||||
if (mConstants.SLOW_TIME > 0 && elapsed > mConstants.SLOW_TIME) {
|
||||
// r.curApp can be null if finish has raced with process death - benign
|
||||
// edge case, and we just ignore it because we're already cleaning up
|
||||
// as expected.
|
||||
if (r.curApp != null
|
||||
&& mConstants.SLOW_TIME > 0 && elapsed > mConstants.SLOW_TIME) {
|
||||
// Core system packages are exempt from deferral policy
|
||||
if (!UserHandle.isCore(r.curApp.uid)) {
|
||||
if (DEBUG_BROADCAST_DEFERRAL) {
|
||||
Slog.i(TAG_BROADCAST, "Broadcast receiver " + (r.nextReceiver - 1)
|
||||
+ " was slow: " + receiver + " br=" + r);
|
||||
}
|
||||
if (r.curApp != null) {
|
||||
mDispatcher.startDeferring(r.curApp.uid);
|
||||
} else {
|
||||
Slog.d(TAG_BROADCAST, "finish receiver curApp is null? " + r);
|
||||
}
|
||||
mDispatcher.startDeferring(r.curApp.uid);
|
||||
} else {
|
||||
if (DEBUG_BROADCAST_DEFERRAL) {
|
||||
Slog.i(TAG_BROADCAST, "Core uid " + r.curApp.uid
|
||||
+ " receiver was slow but not deferring: " + receiver + " br=" + r);
|
||||
+ " receiver was slow but not deferring: "
|
||||
+ receiver + " br=" + r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user