summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author lijilou <lijilou@xiaomi.corp-partner.google.com> 2024-09-14 09:50:41 +0800
committer lijilou <lijilou@xiaomi.corp-partner.google.com> 2024-09-14 11:05:15 +0800
commit2ba8afa04cef2514fdc8d89f36c0011bb2210d63 (patch)
treef8b68fbfb56cc80746595ca7a9ef9edaffe69194
parentf54eb9cbbd659af61eedc8c35e83e155de0db51a (diff)
am:fix NPE and potential infinite loop problem.
The mApp in the OomAdjusterArgs object may be null. Test: OEM monkey test Bug: 366539868 Change-Id: I17d506490177a31c2a928913d0591de8729fdcff
-rw-r--r--services/core/java/com/android/server/am/OomAdjusterModernImpl.java6
1 files changed, 4 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/OomAdjusterModernImpl.java b/services/core/java/com/android/server/am/OomAdjusterModernImpl.java
index 21842db590b0..fb1c2e9a1f9d 100644
--- a/services/core/java/com/android/server/am/OomAdjusterModernImpl.java
+++ b/services/core/java/com/android/server/am/OomAdjusterModernImpl.java
@@ -331,7 +331,7 @@ public class OomAdjusterModernImpl extends OomAdjuster {
void forEachNewNode(int slot, @NonNull Consumer<OomAdjusterArgs> callback) {
ProcessRecordNode node = mLastNode[slot].mNext;
final ProcessRecordNode tail = mProcessRecordNodes[slot].TAIL;
- while (node != tail) {
+ while (node != null && node != tail) {
mTmpOomAdjusterArgs.mApp = node.mApp;
if (node.mApp == null) {
// TODO(b/336178916) - Temporary logging for root causing b/336178916.
@@ -365,7 +365,9 @@ public class OomAdjusterModernImpl extends OomAdjuster {
}
// Save the next before calling callback, since that may change the node.mNext.
final ProcessRecordNode next = node.mNext;
- callback.accept(mTmpOomAdjusterArgs);
+ if (mTmpOomAdjusterArgs.mApp != null) {
+ callback.accept(mTmpOomAdjusterArgs);
+ }
// There are couple of cases:
// a) The current node is moved to another slot
// - for this case, we'd need to keep using the "next" node.