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
This commit is contained in:
@@ -7922,18 +7922,23 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void syncInputTransactions() {
|
public void syncInputTransactions() {
|
||||||
waitForAnimationsToComplete();
|
long token = Binder.clearCallingIdentity();
|
||||||
|
try {
|
||||||
|
waitForAnimationsToComplete();
|
||||||
|
|
||||||
// Collect all input transactions from all displays to make sure we could sync all input
|
// Collect all input transactions from all displays to make sure we could sync all input
|
||||||
// windows at same time.
|
// windows at same time.
|
||||||
final SurfaceControl.Transaction t = mTransactionFactory.get();
|
final SurfaceControl.Transaction t = mTransactionFactory.get();
|
||||||
synchronized (mGlobalLock) {
|
synchronized (mGlobalLock) {
|
||||||
mWindowPlacerLocked.performSurfacePlacementIfScheduled();
|
mWindowPlacerLocked.performSurfacePlacementIfScheduled();
|
||||||
mRoot.forAllDisplays(displayContent ->
|
mRoot.forAllDisplays(displayContent ->
|
||||||
displayContent.getInputMonitor().updateInputWindowsImmediately(t));
|
displayContent.getInputMonitor().updateInputWindowsImmediately(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
t.syncInputWindows().apply();
|
||||||
|
} finally {
|
||||||
|
Binder.restoreCallingIdentity(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
t.syncInputWindows().apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user