diff options
| author | 2019-09-27 17:13:59 +0000 | |
|---|---|---|
| committer | 2019-09-27 17:13:59 +0000 | |
| commit | f33b25ba2e831e42739d90de5ec45d59fec4a03f (patch) | |
| tree | 7602dc62377d5cbb07e7f06e6880face244dc96b | |
| parent | 5401084d63486da720c048a3d6026f752f619068 (diff) | |
| parent | 109ff9d021cde0334f7ad6d73d4dd13d09f89e8d (diff) | |
Merge "Fix deadlock when getting/setting default browser, dialer and home."
| -rw-r--r-- | services/core/java/com/android/server/pm/permission/PermissionManagerService.java | 68 |
1 files changed, 39 insertions, 29 deletions
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index b831374cec45..c491da047927 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -1697,10 +1697,11 @@ public class PermissionManagerService extends IPermissionManager.Stub { if (mPackageManagerInt.getInstantAppPackageName(callingUid) != null) { return null; } + DefaultBrowserProvider provider; synchronized (mLock) { - return mDefaultBrowserProvider == null - ? null : mDefaultBrowserProvider.getDefaultBrowser(userId); + provider = mDefaultBrowserProvider; } + return provider != null ? provider.getDefaultBrowser(userId) : null; } @Override @@ -1716,23 +1717,27 @@ public class PermissionManagerService extends IPermissionManager.Stub { private boolean setDefaultBrowserInternal(String packageName, boolean async, boolean doGrant, int userId) { + if (userId == UserHandle.USER_ALL) { + return false; + } + DefaultBrowserProvider provider; synchronized (mLock) { - if (userId == UserHandle.USER_ALL) { - return false; - } - if (mDefaultBrowserProvider == null) { + provider = mDefaultBrowserProvider; + } + if (provider == null) { + return false; + } + if (async) { + provider.setDefaultBrowserAsync(packageName, userId); + } else { + if (!provider.setDefaultBrowser(packageName, userId)) { return false; } - if (async) { - mDefaultBrowserProvider.setDefaultBrowserAsync(packageName, userId); - } else { - if (!mDefaultBrowserProvider.setDefaultBrowser(packageName, userId)) { - return false; - } - } - if (doGrant && packageName != null) { - mDefaultPermissionGrantPolicy - .grantDefaultPermissionsToDefaultBrowser(packageName, userId); + } + if (doGrant && packageName != null) { + synchronized (mLock) { + mDefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultBrowser(packageName, + userId); } } return true; @@ -4334,15 +4339,17 @@ public class PermissionManagerService extends IPermissionManager.Stub { @Override public void setDefaultHome(String packageName, int userId, Consumer<Boolean> callback) { + if (userId == UserHandle.USER_ALL) { + return; + } + DefaultHomeProvider provider; synchronized (mLock) { - if (userId == UserHandle.USER_ALL) { - return; - } - if (mDefaultHomeProvider == null) { - return; - } - mDefaultHomeProvider.setDefaultHomeAsync(packageName, userId, callback); + provider = mDefaultHomeProvider; + } + if (provider == null) { + return; } + provider.setDefaultHomeAsync(packageName, userId, callback); } @Override @@ -4403,26 +4410,29 @@ public class PermissionManagerService extends IPermissionManager.Stub { @Override public String getDefaultBrowser(int userId) { + DefaultBrowserProvider provider; synchronized (mLock) { - return mDefaultBrowserProvider == null - ? null : mDefaultBrowserProvider.getDefaultBrowser(userId); + provider = mDefaultBrowserProvider; } + return provider != null ? provider.getDefaultBrowser(userId) : null; } @Override public String getDefaultDialer(int userId) { + DefaultDialerProvider provider; synchronized (mLock) { - return mDefaultDialerProvider == null - ? null : mDefaultDialerProvider.getDefaultDialer(userId); + provider = mDefaultDialerProvider; } + return provider != null ? provider.getDefaultDialer(userId) : null; } @Override public String getDefaultHome(int userId) { + DefaultHomeProvider provider; synchronized (mLock) { - return mDefaultHomeProvider == null - ? null : mDefaultHomeProvider.getDefaultHome(userId); + provider = mDefaultHomeProvider; } + return provider != null ? provider.getDefaultHome(userId) : null; } @Override |