From 705aed888b5a783d2a1f9f0392e9863afe309bdd Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Fri, 21 Apr 2023 16:32:56 -0500 Subject: [PATCH] Clear calling identity in TransactionHangCallback This ensures the ActivityManagerService is called with the correct pid. Bug: 278526360 Test: manually tested that the correct PID is sent to ActivityManager Change-Id: I610014c6bc709796e9d4f7aeadf64e5107f37de3 --- core/java/android/view/ViewRootImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index c0ac04ccd4d8e..8f20e2d044ac2 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -961,12 +961,20 @@ public final class ViewRootImpl implements ViewParent, } sAnrReported = true; + // If we're making an in-process call to ActivityManagerService + // and the previous binder call on this thread was oneway, the + // calling PID will be 0. Clearing the calling identity fixes + // this and ensures ActivityManager gets the correct calling + // pid. + final long identityToken = Binder.clearCallingIdentity(); try { ActivityManager.getService().appNotResponding(reason); } catch (RemoteException e) { // We asked the system to crash us, but the system // already crashed. Unfortunately things may be // out of control. + } finally { + Binder.restoreCallingIdentity(identityToken); } } };