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

Commit 9274ed16 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:...

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

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

Change-Id: I7b59474dc6bf65fa5912da0061b2fa2a4759a3f9
parents 08af0c1f 6611a10a
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) {