Fix issue #3485923: Gmail crash
Allow application to try to recover if a surface OOM error
happens on the client side.
Change-Id: I0308bd99647a35e4bcac448340b7fc6330a828f6
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index e6dfb7f..2eafc1d 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -6184,7 +6184,7 @@
}
}
- public boolean killPids(int[] pids, String pReason) {
+ public boolean killPids(int[] pids, String pReason, boolean secure) {
if (Binder.getCallingUid() != Process.SYSTEM_UID) {
throw new SecurityException("killPids only available to the system");
}
@@ -6207,11 +6207,18 @@
}
}
- // If the worse oom_adj is somewhere in the hidden proc LRU range,
+ // If the worst oom_adj is somewhere in the hidden proc LRU range,
// then constrain it so we will kill all hidden procs.
if (worstType < EMPTY_APP_ADJ && worstType > HIDDEN_APP_MIN_ADJ) {
worstType = HIDDEN_APP_MIN_ADJ;
}
+
+ // If this is not a secure call, don't let it kill processes that
+ // are important.
+ if (!secure && worstType < SECONDARY_SERVER_ADJ) {
+ worstType = SECONDARY_SERVER_ADJ;
+ }
+
Slog.w(TAG, "Killing processes " + reason + " at adjustment " + worstType);
for (int i=0; i<pids.length; i++) {
ProcessRecord proc = mPidsSelfLocked.get(pids[i]);