Merge "InputManagerService: Do not remove input channel when disposing monitor" into sc-dev am: 2f13cca5a6
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15405649 Change-Id: Ic25aef1e439b4f9b653ccba7ecfe8f301dfbeff7
This commit is contained in:
@@ -3228,7 +3228,7 @@ public class InputManagerService extends IInputManager.Stub
|
||||
* Interface for the system to handle request from InputMonitors.
|
||||
*/
|
||||
private final class InputMonitorHost extends IInputMonitorHost.Stub {
|
||||
private final IBinder mToken;
|
||||
private IBinder mToken;
|
||||
|
||||
InputMonitorHost(IBinder token) {
|
||||
mToken = token;
|
||||
@@ -3236,12 +3236,23 @@ public class InputManagerService extends IInputManager.Stub
|
||||
|
||||
@Override
|
||||
public void pilferPointers() {
|
||||
if (mToken == null) {
|
||||
throw new IllegalStateException(
|
||||
"Illegal call to pilferPointers after InputMonitorHost is disposed.");
|
||||
}
|
||||
nativePilferPointers(mPtr, mToken);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
nativeRemoveInputChannel(mPtr, mToken);
|
||||
// We do not remove the input monitor here by calling nativeRemoveInputChannel because
|
||||
// it causes a race in InputDispatcher between the removal of the InputChannel through
|
||||
// that call and the InputChannel#dispose call (which causes an FD hangup) from the
|
||||
// client (b/189135695).
|
||||
//
|
||||
// NOTE: This means the client is responsible for properly closing the InputMonitor by
|
||||
// disposing the InputChannel and all its duplicates.
|
||||
mToken = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user