Clear calling identity when requesting syncInputTransaction
The syncInputTransaction can trigger a performSurfacePlacement which could result in a callback to the client. In that case, the calling PID will be incorrect since we didn't clear the calling identity before requesting the performSurfacePlacement. Bug: 154665556 Test: Hard to reproduce. Existing tests pass Change-Id: Id7c35d356cfc435e2de225e4e0d3979751c5c7d4 Merged-In: Id7c35d356cfc435e2de225e4e0d3979751c5c7d4
This commit is contained in:
@@ -7717,14 +7717,19 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
|
||||
@Override
|
||||
public void syncInputTransactions() {
|
||||
waitForAnimationsToComplete();
|
||||
long token = Binder.clearCallingIdentity();
|
||||
try {
|
||||
waitForAnimationsToComplete();
|
||||
|
||||
synchronized (mGlobalLock) {
|
||||
mWindowPlacerLocked.performSurfacePlacementIfScheduled();
|
||||
mRoot.forAllDisplays(displayContent ->
|
||||
synchronized (mGlobalLock) {
|
||||
mWindowPlacerLocked.performSurfacePlacementIfScheduled();
|
||||
mRoot.forAllDisplays(displayContent ->
|
||||
displayContent.getInputMonitor().updateInputWindowsImmediately());
|
||||
}
|
||||
new SurfaceControl.Transaction().syncInputWindows().apply(true);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
new SurfaceControl.Transaction().syncInputWindows().apply(true);
|
||||
}
|
||||
|
||||
private void waitForAnimationsToComplete() {
|
||||
|
||||
Reference in New Issue
Block a user