summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hai Zhang <zhanghai@google.com> 2019-09-27 17:13:59 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-09-27 17:13:59 +0000
commitf33b25ba2e831e42739d90de5ec45d59fec4a03f (patch)
tree7602dc62377d5cbb07e7f06e6880face244dc96b
parent5401084d63486da720c048a3d6026f752f619068 (diff)
parent109ff9d021cde0334f7ad6d73d4dd13d09f89e8d (diff)
Merge "Fix deadlock when getting/setting default browser, dialer and home."
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerService.java68
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