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

Commit 6611a10a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Pause watchdog monitor for incfs native lib extraction" into sc-dev am: 920e1fd7

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

Change-Id: I41be5812173b379543da8d777673da3e7ce519a0
parents b44ee54d 920e1fd7
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ import android.os.incremental.IncrementalManager;
import android.os.incremental.IncrementalStorage;
import android.system.ErrnoException;
import android.system.Os;
import android.util.ArraySet;
import android.util.Slog;

import dalvik.system.CloseGuard;
@@ -551,18 +550,4 @@ public class NativeLibraryHelper {
        }
        return false;
    }

    /**
     * Wait for all native library extraction to complete for the passed storages.
     *
     * @param incrementalStorages A list of the storages to wait for.
     */
    public static void waitForNativeBinariesExtraction(
            ArraySet<IncrementalStorage> incrementalStorages) {
        for (int i = 0; i < incrementalStorages.size(); ++i) {
            IncrementalStorage storage = incrementalStorages.valueAtUnchecked(i);
            storage.waitForNativeBinariesExtraction();
        }
    }

}
+22 −1
Original line number Diff line number Diff line
@@ -20111,7 +20111,28 @@ public class PackageManagerService extends IPackageManager.Stub
            notifyPackageChangeObserversOnUpdate(reconciledPkg);
        }
        NativeLibraryHelper.waitForNativeBinariesExtraction(incrementalStorages);
        waitForNativeBinariesExtraction(incrementalStorages);
    }
    static void waitForNativeBinariesExtraction(
            ArraySet<IncrementalStorage> incrementalStorages) {
        if (incrementalStorages.isEmpty()) {
            return;
        }
        try {
            // Native library extraction may take very long time: each page could potentially
            // wait for either 10s or 100ms (adb vs non-adb data loader), and that easily adds
            // up to a full watchdog timeout of 1 min, killing the system after that. It doesn't
            // make much sense as blocking here doesn't lock up the framework, but only blocks
            // the installation session and the following ones.
            Watchdog.getInstance().pauseWatchingCurrentThread("native_lib_extract");
            for (int i = 0; i < incrementalStorages.size(); ++i) {
                IncrementalStorage storage = incrementalStorages.valueAtUnchecked(i);
                storage.waitForNativeBinariesExtraction();
            }
        } finally {
            Watchdog.getInstance().resumeWatchingCurrentThread("native_lib_extract");
        }
    }
    private int[] getInstalledUsers(PackageSetting ps, int userId) {