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

Commit 759175a5 authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "Copy leashes about to return to prevent others release them"...

Merge "Merge "Copy leashes about to return to prevent others release them" into rvc-dev am: d4ec66b4 am: 3a51ab70" into rvc-d1-dev-plus-aosp
parents f5b6e17c 86d1ba5d
Loading
Loading
Loading
Loading
+9 −11
Original line number Original line Diff line number Diff line
@@ -2446,17 +2446,15 @@ public class WindowManagerService extends IWindowManager.Stub
            if (controls != null) {
            if (controls != null) {
                final int length = Math.min(controls.length, outControls.length);
                final int length = Math.min(controls.length, outControls.length);
                for (int i = 0; i < length; i++) {
                for (int i = 0; i < length; i++) {
                    final InsetsSourceControl control = controls[i];
                    // We will leave the critical section before returning the leash to the client,

                    // so we need to copy the leash to prevent others release the one that we are
                    // Check if we are sending invalid leashes.
                    // about to return.
                    final SurfaceControl leash = control != null ? control.getLeash() : null;
                    // TODO: We will have an extra copy if the client is not local.
                    if (leash != null && !leash.isValid()) {
                    //       For now, we rely on GC to release it.
                        Slog.wtf(TAG, leash + " is not valid before sending to " + win,
                    //       Maybe we can modify InsetsSourceControl.writeToParcel so it can release
                                leash.getReleaseStack());
                    //       the extra leash as soon as possible.
                    }
                    outControls[i] = controls[i] != null

                            ? new InsetsSourceControl(controls[i]) : null;
                    outControls[i] = win.isClientLocal() && control != null
                            ? new InsetsSourceControl(control) : control;
                }
                }
            }
            }
        }
        }