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

Commit 7a6d4a22 authored by lijilou's avatar lijilou Committed by Jilou li
Browse files

am:fix the dead lock.

The crash log:
  "binder:2147_1B" prio=5 tid=330 Blocked
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x16178158 self=0xb4000074291c1640
  | sysTid=6189 nice=-2 cgrp=foreground sched=1073741824/0 handle=0x6fdb48d730
  | state=S schedstat=( 820274539993 1102645025298 3289471 ) utm=43949 stm=38078 core=7 HZ=100
  | stack=0x6fdb396000-0x6fdb398000 stackSize=989KB
  | held mutexes=
  at com.android.server.am.AppRestrictionController.isSystemModule(AppRestrictionController.java:1614)
  - waiting to lock <0x013e2e5c> (a java.lang.Object) held by thread 325
  at com.android.server.am.AppRestrictionController.getPotentialSystemExemptionReason(AppRestrictionController.java:2935)
  at com.android.server.am.ActiveServices$SystemExemptedFgsTypePermission.checkPermission(ActiveServices.java:3125)
  at android.app.ForegroundServiceTypePolicy$DefaultForegroundServiceTypePolicy.checkForegroundServiceTypePolicy(ForegroundServiceTypePolicy.java:1413)
  at com.android.server.am.ActiveServices.validateForegroundServiceType(ActiveServices.java:3051)
  at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:2787)
  at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1976)
  at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:14841)
  - locked <0x012ea0e8> (a com.android.server.am.ActivityManagerService)
  at android.app.IActivityManager$Stub.onTransact$setServiceForeground$(IActivityManager.java:13479)
  at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:3716)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2992)
  at android.os.Binder.execTransactInternal(Binder.java:1507)
  at android.os.Binder.execTransact(Binder.java:1451)

—

"binder:2147_17" prio=5 tid=325 Blocked
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x1612dd20 self=0xb4000074291bdea0
  | sysTid=5372 nice=-20 cgrp=foreground sched=1073741824/0 handle=0x6ffa651730
  | state=S schedstat=( 750705778322 1082786030003 3173156 ) utm=40274 stm=34796 core=0 HZ=100
  | stack=0x6ffa55a000-0x6ffa55c000 stackSize=989KB
  | held mutexes=
  at com.android.server.am.ActivityManagerService$LocalService.isProfileOwner(ActivityManagerService.java:20529)
  - waiting to lock <0x012ea0e8> (a com.android.server.am.ActivityManagerService) held by thread 330
  at com.android.server.am.AppRestrictionController.getPotentialSystemExemptionReason(AppRestrictionController.java:2910)
  at com.android.server.am.AppRestrictionController.getBackgroundRestrictionExemptionReason(AppRestrictionController.java:2861)
  at com.android.server.am.BaseAppStatePolicy.shouldExemptUid(BaseAppStatePolicy.java:122)
  at com.android.server.am.AppBatteryTracker.dump(AppBatteryTracker.java:865)
  - locked <0x013e2e5c> (a java.lang.Object)
  at com.android.server.am.AppRestrictionController.dump(AppRestrictionController.java:2024)
  at com.android.server.am.ActivityManagerService.dumpAppRestrictionController(ActivityManagerService.java:11263)
  at com.android.server.am.ActivityManagerService.doDump(ActivityManagerService.java:11720)
  at com.android.server.am.ActivityManagerService.-$$Nest$mdoDump(unavailable:0)
  at com.android.server.am.ActivityManagerService$1.dumpNormal(ActivityManagerService.java:895)
  at com.android.server.utils.PriorityDump.dump(PriorityDump.java:178)
  at com.android.server.am.ActivityManagerService.dump(ActivityManagerService.java:11070)
  at android.os.Binder.doDump(Binder.java:1173)
  at android.os.Binder.dump(Binder.java:1163)
  at android.os.Binder.onTransact(Binder.java:1029)
  at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:6017)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2992)
  at android.os.Binder.execTransactInternal(Binder.java:1512)
  at android.os.Binder.execTransact(Binder.java:1451)

Test: OEM monkey test
Bug: 358274041
Change-Id: Id39493d1d24ced3702d51ed6bb66085556afbf7c
parent 474508b7
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -297,7 +297,7 @@ public final class AppRestrictionController {
    /**
     * Cache the package name and information about if it's a system module.
     */
    @GuardedBy("mLock")
    @GuardedBy("mSystemModulesCache")
    private final HashMap<String, Boolean> mSystemModulesCache = new HashMap<>();

    /**
@@ -1588,7 +1588,7 @@ public final class AppRestrictionController {
        if (moduleInfos == null) {
            return;
        }
        synchronized (mLock) {
        synchronized (mSystemModulesCache) {
            for (ModuleInfo info : moduleInfos) {
                mSystemModulesCache.put(info.getPackageName(), Boolean.TRUE);
            }
@@ -1596,7 +1596,7 @@ public final class AppRestrictionController {
    }

    private boolean isSystemModule(String packageName) {
        synchronized (mLock) {
        synchronized (mSystemModulesCache) {
            final Boolean val = mSystemModulesCache.get(packageName);
            if (val != null) {
                return val.booleanValue();
@@ -1624,7 +1624,7 @@ public final class AppRestrictionController {
            }
        }
        // Update the cache.
        synchronized (mLock) {
        synchronized (mSystemModulesCache) {
            mSystemModulesCache.put(packageName, isSystemModule);
        }
        return isSystemModule;