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

Commit d1a5fae3 authored by Michael Wright's avatar Michael Wright
Browse files

Always destroy virtual display on Binder death.

Bug: 20265052
Change-Id: I039d3f2bab0dcbbcdc99b7105b04de5bc3845e05
parent fbb34dd8
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
            appToken.linkToDeath(device, 0);
        } catch (RemoteException ex) {
            mVirtualDisplayDevices.remove(appToken);
            device.destroyLocked();
            device.destroyLocked(false);
            return null;
        }

@@ -110,7 +110,7 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
    public DisplayDevice releaseVirtualDisplayLocked(IBinder appToken) {
        VirtualDisplayDevice device = mVirtualDisplayDevices.remove(appToken);
        if (device != null) {
            device.destroyLocked();
            device.destroyLocked(true);
            appToken.unlinkToDeath(device, 0);
        }

@@ -147,7 +147,7 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
        if (device != null) {
            Slog.i(TAG, "Virtual display device released because application token died: "
                    + device.mOwnerPackageName);
            device.destroyLocked();
            device.destroyLocked(false);
            sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_REMOVED);
        }
    }
@@ -205,20 +205,20 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
        @Override
        public void binderDied() {
            synchronized (getSyncRoot()) {
                if (mSurface != null) {
                handleBinderDiedLocked(mAppToken);
            }
        }
        }

        public void destroyLocked() {
        public void destroyLocked(boolean binderAlive) {
            if (mSurface != null) {
                mSurface.release();
                mSurface = null;
            }
            SurfaceControl.destroyDisplay(getDisplayTokenLocked());
            if (binderAlive) {
                mCallback.dispatchDisplayStopped();
            }
        }

        @Override
        public Runnable requestDisplayStateLocked(int state, int brightness) {