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

Commit 7d279c7d authored by JW Wang's avatar JW Wang Committed by Chun-Wei Wang
Browse files

Prevent committing session while in progress

Committing a session twice in a row will result in interleaved
verification flows and break the internal states.

Add a field to prevent committing again while the installation
is already in progress.

Bug: 256330705
Test: will add CTS
Change-Id: I1f5a90acde1874b3efbe4dad55f366e991bb4a21
parent dd21954e
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -380,6 +380,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
    @GuardedBy("mLock")
    private boolean mStageDirInUse = false;

    /**
     * True if the installation is already in progress. This is used to prevent the caller
     * from {@link #commit(IntentSender, boolean) committing} the session again while the
     * installation is still in progress.
     */
    @GuardedBy("mLock")
    private boolean mInstallationInProgress = false;

    /** Permissions have been accepted by the user (see {@link #setPermissionsResult}) */
    @GuardedBy("mLock")
    private boolean mPermissionsManuallyAccepted = false;
@@ -1692,6 +1700,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
            }
        }

        synchronized (mLock) {
            if (mInstallationInProgress) {
                throw new IllegalStateException("Installation is already in progress. Don't "
                        + "commit session=" + sessionId + " again.");
            }
            mInstallationInProgress = true;
        }

        dispatchSessionSealed();
    }