Fix locking issue by short-circuiting feature

This is a temporary fix to avoid holding the PackageManagerService.mLock
while querying the DeviceConfig provider, which then attempts to acquire
the same lock. A subsequent CL will provide a correct and longer term
fix.

Fixes: 139348423
Test: atest AppsFilterTest
Change-Id: I4422fbb51d23e276c26cc9d8ba48783e7c5e53ff
This commit is contained in:
Patrick Baumann
2019-08-14 08:20:08 -07:00
parent 5cc1472d82
commit 4e47d16509

View File

@@ -28,13 +28,11 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.permission.IPermissionManager;
import android.provider.DeviceConfig;
import android.util.ArraySet;
import android.util.Slog;
import android.util.SparseArray;
import com.android.internal.R;
import com.android.server.FgThread;
import java.io.PrintWriter;
import java.util.Collections;
@@ -135,19 +133,7 @@ class AppsFilter {
}
IPermissionManager permissionmgr =
(IPermissionManager) ServiceManager.getService("permissionmgr");
return new AppsFilter(() -> {
if (featureEnabled.get() < 0) {
featureEnabled.set(DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
"package_query_filtering_enabled", false) ? 1 : 0);
DeviceConfig.addOnPropertiesChangedListener(
DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
FgThread.getExecutor(),
pr -> featureEnabled.set(
pr.getBoolean("package_query_filtering_enabled", false) ? 1 : 0));
}
return featureEnabled.get() == 1;
}, permissionmgr,
return new AppsFilter(() -> false, permissionmgr,
context.getSystemService(AppOpsManager.class), forcedQueryablePackageNames,
forceSystemAppsQueryable);
}