Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dba33500 authored by Prabir Pradhan's avatar Prabir Pradhan Committed by Automerger Merge Worker
Browse files

Merge "InputManagerService: Do not remove input channel when disposing...

Merge "InputManagerService: Do not remove input channel when disposing monitor" into sc-dev am: 2f13cca5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15405649

Change-Id: Id4b3d10a1f5b8837621c1252f67e101c449a9e01
parents 3f47f90e 2f13cca5
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -3230,7 +3230,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;
@@ -3238,12 +3238,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;
        }
    }