tree e6ff3e71cb86def88d6cbc7c2cbbc075c441b9af
parent 029ae4dcbfbde25b02968538f75f5729b3fba196
author guoyin.chen <guoyin.chen@freescale.com> 1458623565 +0800
committer Jeff Sharkey <jsharkey@android.com> 1458662291 -0600

com.android.cts.appsecurity.AdoptableHostTest may trigger below dead
lock in system_server in the board with external adoptable storage
as below stack:

"Binder_4" prio=5 tid=60 Blocked
    at com.android.server.pm.UserManagerService.exists(UserManagerSer
        vice.java:411)
    - waiting to lock <0x06858aff> (a android.util.ArrayMap) held by
        thread 19
    at com.android.server.pm.PackageManagerService.checkUidPermissio
        n(PackageManagerService.java:3193)
    at android.app.ActivityManager.checkComponentPermission(ActivityM
        anager.java:2647)
    at com.android.server.pm.UserManagerService.checkManageUsersPermi
        ssion(UserManagerService.java:678)
    at com.android.server.pm.UserManagerService.getUsers(UserManagerS
        ervice.java:272)
    at android.os.UserManager.getUsers(UserManager.java:966)
    at com.android.server.MountService.resetIfReadyAndConnectedLocked
        (MountService.java:800)
    at com.android.server.MountService.forgetAllVolumes(MountService.
        java:1806)
    - locked <0x077010cc> (a java.lang.Object)
    at android.os.storage.IMountService$Stub.onTransact(IMountService
        .java:1859)
    at android.os.Binder.execTransact(Binder.java:453)

"PackageManager" prio=5 tid=19 Blocked
    at com.android.server.MountService.getVolumeList(MountService.jav
        a:2708)
    - waiting to lock <0x077010cc> (a java.lang.Object) held by threa
        d 60
    at android.os.storage.StorageManager.getVolumeList(StorageManager
        .java:883)
    at android.os.Environment$UserEnvironment.getExternalDirs(Environ
        ment.java:83)
    at android.os.Environment.isExternalStorageEmulated(Environment.j
        ava:719)
    at com.android.server.pm.PackageManagerService.isExternalMediaAva
        ilable(PackagkageManagerService.java:9453)
    at com.android.server.pm.PackageManagerService.startCleaningPacka
        ges(PackageManagerService.java:9493)
    - locked <0x06858aff> (a android.util.ArrayMap)
    at com.android.server.pm.PackageManagerService$PackageHandler.doH
        andleMessage(PackageManagerService.java:1331)
    at com.android.server.pm.PackageManagerService$PackageHandler.han
        dleMessage(PackageManagerService.java:1133)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.os.HandlerThread.run(HandlerThread.java:61)
    at com.android.server.ServiceThread.run(ServiceThread.java:46)

Signed-off-by: guoyin.chen <guoyin.chen@freescale.com>
