summaryrefslogtreecommitdiffstats
path: root/services/core/java/com
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2015-01-09 09:54:06 -0800
committerDianne Hackborn <hackbod@google.com>2015-01-09 09:54:06 -0800
commitb3d4cb369e37b1b7e85832cc035226dc7cc8f380 (patch)
tree5a16c37ccc28c6d25eee080c61c27df966e76079 /services/core/java/com
parent9d4b7963399045395799dcb7df5d8c84d9b12884 (diff)
downloadframeworks_base-b3d4cb369e37b1b7e85832cc035226dc7cc8f380.zip
frameworks_base-b3d4cb369e37b1b7e85832cc035226dc7cc8f380.tar.gz
frameworks_base-b3d4cb369e37b1b7e85832cc035226dc7cc8f380.tar.bz2
Fix issue #18942959: Phone getting stuck then restarts after unplugging from Audi
FastPrintWriter needs to have its own lock for each instance, or else one getting blocked can cause others to block and whacky deadlocks result. Also: - Improve error reporting of SystemConfig to tell you which config file is the problem. - Fix CoreSettingsProvider to not spew errors if a setting is not defined (it should just use a default value). - Get rid of noisy init output of ConditionProviders. - Reduce log noise of starting a process; move some of that information to ProcessRecord to print on demand. Change-Id: I1032d141ddd449968b74ab7b88ab36f2d228ad1a
Diffstat (limited to 'services/core/java/com')
-rw-r--r--services/core/java/com/android/server/SystemConfig.java26
-rwxr-xr-xservices/core/java/com/android/server/am/ActivityManagerService.java26
-rw-r--r--services/core/java/com/android/server/am/CoreSettingsObserver.java82
-rw-r--r--services/core/java/com/android/server/am/ProcessRecord.java15
-rw-r--r--services/core/java/com/android/server/notification/ConditionProviders.java1
5 files changed, 74 insertions, 76 deletions
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java
index eb89f21..6ad128c 100644
--- a/services/core/java/com/android/server/SystemConfig.java
+++ b/services/core/java/com/android/server/SystemConfig.java
@@ -205,8 +205,8 @@ public class SystemConfig {
}
if (!parser.getName().equals("permissions") && !parser.getName().equals("config")) {
- throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() +
- ", expected 'permissions' or 'config'");
+ throw new XmlPullParserException("Unexpected start tag in " + permFile
+ + ": found " + parser.getName() + ", expected 'permissions' or 'config'");
}
while (true) {
@@ -222,7 +222,7 @@ public class SystemConfig {
int gid = android.os.Process.getGidForName(gidStr);
mGlobalGids = appendInt(mGlobalGids, gid);
} else {
- Slog.w(TAG, "<group> without gid at "
+ Slog.w(TAG, "<group> without gid in " + permFile + " at "
+ parser.getPositionDescription());
}
@@ -231,7 +231,7 @@ public class SystemConfig {
} else if ("permission".equals(name) && !onlyFeatures) {
String perm = parser.getAttributeValue(null, "name");
if (perm == null) {
- Slog.w(TAG, "<permission> without name at "
+ Slog.w(TAG, "<permission> without name in " + permFile + " at "
+ parser.getPositionDescription());
XmlUtils.skipCurrentTag(parser);
continue;
@@ -242,14 +242,14 @@ public class SystemConfig {
} else if ("assign-permission".equals(name) && !onlyFeatures) {
String perm = parser.getAttributeValue(null, "name");
if (perm == null) {
- Slog.w(TAG, "<assign-permission> without name at "
+ Slog.w(TAG, "<assign-permission> without name in " + permFile + " at "
+ parser.getPositionDescription());
XmlUtils.skipCurrentTag(parser);
continue;
}
String uidStr = parser.getAttributeValue(null, "uid");
if (uidStr == null) {
- Slog.w(TAG, "<assign-permission> without uid at "
+ Slog.w(TAG, "<assign-permission> without uid in " + permFile + " at "
+ parser.getPositionDescription());
XmlUtils.skipCurrentTag(parser);
continue;
@@ -257,7 +257,7 @@ public class SystemConfig {
int uid = Process.getUidForName(uidStr);
if (uid < 0) {
Slog.w(TAG, "<assign-permission> with unknown uid \""
- + uidStr + "\" at "
+ + uidStr + " in " + permFile + " at "
+ parser.getPositionDescription());
XmlUtils.skipCurrentTag(parser);
continue;
@@ -275,10 +275,10 @@ public class SystemConfig {
String lname = parser.getAttributeValue(null, "name");
String lfile = parser.getAttributeValue(null, "file");
if (lname == null) {
- Slog.w(TAG, "<library> without name at "
+ Slog.w(TAG, "<library> without name in " + permFile + " at "
+ parser.getPositionDescription());
} else if (lfile == null) {
- Slog.w(TAG, "<library> without file at "
+ Slog.w(TAG, "<library> without file in " + permFile + " at "
+ parser.getPositionDescription());
} else {
//Log.i(TAG, "Got library " + lname + " in " + lfile);
@@ -297,7 +297,7 @@ public class SystemConfig {
allowed = !"true".equals(notLowRam);
}
if (fname == null) {
- Slog.w(TAG, "<feature> without name at "
+ Slog.w(TAG, "<feature> without name in " + permFile + " at "
+ parser.getPositionDescription());
} else if (allowed) {
//Log.i(TAG, "Got feature " + fname);
@@ -311,7 +311,7 @@ public class SystemConfig {
} else if ("unavailable-feature".equals(name)) {
String fname = parser.getAttributeValue(null, "name");
if (fname == null) {
- Slog.w(TAG, "<unavailable-feature> without name at "
+ Slog.w(TAG, "<unavailable-feature> without name in " + permFile + " at "
+ parser.getPositionDescription());
} else {
mUnavailableFeatures.add(fname);
@@ -322,7 +322,7 @@ public class SystemConfig {
} else if ("allow-in-power-save".equals(name) && !onlyFeatures) {
String pkgname = parser.getAttributeValue(null, "package");
if (pkgname == null) {
- Slog.w(TAG, "<allow-in-power-save> without package at "
+ Slog.w(TAG, "<allow-in-power-save> without package in " + permFile + " at "
+ parser.getPositionDescription());
} else {
mAllowInPowerSave.add(pkgname);
@@ -333,7 +333,7 @@ public class SystemConfig {
} else if ("fixed-ime-app".equals(name) && !onlyFeatures) {
String pkgname = parser.getAttributeValue(null, "package");
if (pkgname == null) {
- Slog.w(TAG, "<fixed-ime-app> without package at "
+ Slog.w(TAG, "<fixed-ime-app> without package in " + permFile + " at "
+ parser.getPositionDescription());
} else {
mFixedImeApps.add(pkgname);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 97b4353..4b7fb2b 100755
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -2998,6 +2998,10 @@ public final class ActivityManagerService extends ActivityManagerNative
instructionSet = VMRuntime.getInstructionSet(app.info.primaryCpuAbi);
}
+ app.gids = gids;
+ app.requiredAbi = requiredAbi;
+ app.instructionSet = instructionSet;
+
// Start the process. It will either succeed and return a result containing
// the PID of the new process, or else throw a RuntimeException.
boolean isActivityProcess = (entryPoint == null);
@@ -3028,7 +3032,11 @@ public final class ActivityManagerService extends ActivityManagerNative
StringBuilder buf = mStringBuilder;
buf.setLength(0);
buf.append("Start proc ");
+ buf.append(startResult.pid);
+ buf.append(':');
buf.append(app.processName);
+ buf.append('/');
+ UserHandle.formatUid(buf, uid);
if (!isActivityProcess) {
buf.append(" [");
buf.append(entryPoint);
@@ -3040,23 +3048,6 @@ public final class ActivityManagerService extends ActivityManagerNative
buf.append(" ");
buf.append(hostingNameStr);
}
- buf.append(": pid=");
- buf.append(startResult.pid);
- buf.append(" uid=");
- buf.append(uid);
- buf.append(" gids={");
- if (gids != null) {
- for (int gi=0; gi<gids.length; gi++) {
- if (gi != 0) buf.append(", ");
- buf.append(gids[gi]);
-
- }
- }
- buf.append("}");
- if (requiredAbi != null) {
- buf.append(" abi=");
- buf.append(requiredAbi);
- }
Slog.i(TAG, buf.toString());
app.setPid(startResult.pid);
app.usingWrapper = startResult.usingWrapper;
@@ -5327,7 +5318,6 @@ public final class ActivityManagerService extends ActivityManagerNative
int callingPid = Binder.getCallingPid();
if (callingPid == Process.myPid()) {
// Yeah, um, no.
- Slog.w(TAG, "Can't addPackageDependency on system process");
return;
}
ProcessRecord proc;
diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java
index 0dc163b..d1682b8 100644
--- a/services/core/java/com/android/server/am/CoreSettingsObserver.java
+++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java
@@ -108,50 +108,46 @@ final class CoreSettingsObserver extends ContentObserver {
for (Map.Entry<String, Class<?>> entry : map.entrySet()) {
String setting = entry.getKey();
Class<?> type = entry.getValue();
- try {
- if (type == String.class) {
- final String value;
- if (map == sSecureSettingToTypeMap) {
- value = Settings.Secure.getString(context.getContentResolver(), setting);
- } else if (map == sSystemSettingToTypeMap) {
- value = Settings.System.getString(context.getContentResolver(), setting);
- } else {
- value = Settings.Global.getString(context.getContentResolver(), setting);
- }
- snapshot.putString(setting, value);
- } else if (type == int.class) {
- final int value;
- if (map == sSecureSettingToTypeMap) {
- value = Settings.Secure.getInt(context.getContentResolver(), setting);
- } else if (map == sSystemSettingToTypeMap) {
- value = Settings.System.getInt(context.getContentResolver(), setting);
- } else {
- value = Settings.Global.getInt(context.getContentResolver(), setting);
- }
- snapshot.putInt(setting, value);
- } else if (type == float.class) {
- final float value;
- if (map == sSecureSettingToTypeMap) {
- value = Settings.Secure.getFloat(context.getContentResolver(), setting);
- } else if (map == sSystemSettingToTypeMap) {
- value = Settings.System.getFloat(context.getContentResolver(), setting);
- } else {
- value = Settings.Global.getFloat(context.getContentResolver(), setting);
- }
- snapshot.putFloat(setting, value);
- } else if (type == long.class) {
- final long value;
- if (map == sSecureSettingToTypeMap) {
- value = Settings.Secure.getLong(context.getContentResolver(), setting);
- } else if (map == sSystemSettingToTypeMap) {
- value = Settings.System.getLong(context.getContentResolver(), setting);
- } else {
- value = Settings.Global.getLong(context.getContentResolver(), setting);
- }
- snapshot.putLong(setting, value);
+ if (type == String.class) {
+ final String value;
+ if (map == sSecureSettingToTypeMap) {
+ value = Settings.Secure.getString(context.getContentResolver(), setting);
+ } else if (map == sSystemSettingToTypeMap) {
+ value = Settings.System.getString(context.getContentResolver(), setting);
+ } else {
+ value = Settings.Global.getString(context.getContentResolver(), setting);
}
- } catch (SettingNotFoundException snfe) {
- Log.w(LOG_TAG, "Cannot find setting \"" + setting + "\"", snfe);
+ snapshot.putString(setting, value);
+ } else if (type == int.class) {
+ final int value;
+ if (map == sSecureSettingToTypeMap) {
+ value = Settings.Secure.getInt(context.getContentResolver(), setting, 0);
+ } else if (map == sSystemSettingToTypeMap) {
+ value = Settings.System.getInt(context.getContentResolver(), setting, 0);
+ } else {
+ value = Settings.Global.getInt(context.getContentResolver(), setting, 0);
+ }
+ snapshot.putInt(setting, value);
+ } else if (type == float.class) {
+ final float value;
+ if (map == sSecureSettingToTypeMap) {
+ value = Settings.Secure.getFloat(context.getContentResolver(), setting, 0);
+ } else if (map == sSystemSettingToTypeMap) {
+ value = Settings.System.getFloat(context.getContentResolver(), setting, 0);
+ } else {
+ value = Settings.Global.getFloat(context.getContentResolver(), setting, 0);
+ }
+ snapshot.putFloat(setting, value);
+ } else if (type == long.class) {
+ final long value;
+ if (map == sSecureSettingToTypeMap) {
+ value = Settings.Secure.getLong(context.getContentResolver(), setting, 0);
+ } else if (map == sSystemSettingToTypeMap) {
+ value = Settings.System.getLong(context.getContentResolver(), setting, 0);
+ } else {
+ value = Settings.Global.getLong(context.getContentResolver(), setting, 0);
+ }
+ snapshot.putLong(setting, value);
}
}
}
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 7c48f3e..a6c616a 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -64,6 +64,9 @@ final class ProcessRecord {
ProcessStats.ProcessState baseProcessTracker;
BatteryStatsImpl.Uid.Proc curProcBatteryStats;
int pid; // The process of this application; 0 if none
+ int[] gids; // The gids this process was launched with
+ String requiredAbi; // The ABI this process was launched with
+ String instructionSet; // The instruction set this process was launched with
boolean starting; // True if the process is being started
long lastActivityTime; // For managing the LRU list
long lastPssTime; // Last time we retrieved PSS data
@@ -183,7 +186,17 @@ final class ProcessRecord {
if (uid != info.uid) {
pw.print(" ISOLATED uid="); pw.print(uid);
}
- pw.println();
+ pw.print(" gids={");
+ if (gids != null) {
+ for (int gi=0; gi<gids.length; gi++) {
+ if (gi != 0) pw.print(", ");
+ pw.print(gids[gi]);
+
+ }
+ }
+ pw.println("}");
+ pw.print(prefix); pw.print("requiredAbi="); pw.print(requiredAbi);
+ pw.print(" instructionSet="); pw.println(instructionSet);
if (info.className != null) {
pw.print(prefix); pw.print("class="); pw.println(info.className);
}
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index 64d77c1..ab53fbc 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -168,7 +168,6 @@ public class ConditionProviders extends ManagedServices {
@Override
protected void onServiceAdded(ManagedServiceInfo info) {
- Slog.d(TAG, "onServiceAdded " + info);
final IConditionProvider provider = provider(info);
try {
provider.onConnected();