Fix issue #17146552: system anr
Add a safe path for Slog.wtf that doesn't acquire an activity manager
lock or block in any way.
Change-Id: I8fef8251a0cb85081442cae55d85063944248d15
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 16d091a..1f7e450 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1392,8 +1392,9 @@
data.enforceInterface(IActivityManager.descriptor);
IBinder app = data.readStrongBinder();
String tag = data.readString();
+ boolean system = data.readInt() != 0;
ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
- boolean res = handleApplicationWtf(app, tag, ci);
+ boolean res = handleApplicationWtf(app, tag, system, ci);
reply.writeNoException();
reply.writeInt(res ? 1 : 0);
return true;
@@ -4069,7 +4070,7 @@
data.recycle();
}
- public boolean handleApplicationWtf(IBinder app, String tag,
+ public boolean handleApplicationWtf(IBinder app, String tag, boolean system,
ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
{
Parcel data = Parcel.obtain();
@@ -4077,6 +4078,7 @@
data.writeInterfaceToken(IActivityManager.descriptor);
data.writeStrongBinder(app);
data.writeString(tag);
+ data.writeInt(system ? 1 : 0);
crashInfo.writeToParcel(data, 0);
mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
reply.readException();