diff options
| author | 2020-06-24 17:29:19 +0000 | |
|---|---|---|
| committer | 2020-06-24 17:29:19 +0000 | |
| commit | 3c76edd5a33b0c1fae6f5b5c84ee764d44dc57fb (patch) | |
| tree | 3f9fa7e593d422a0a64c60ad8be5a711d2da372f | |
| parent | a9d76001a96f2a6aa12cfef8be50eddf4fe7c7f4 (diff) | |
| parent | 1d1e75319a6831615e4fbb3e02e34026f5bae5a2 (diff) | |
Merge "Relax locking for startActivityInPackage()." into rvc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStarter.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityTaskManagerService.java | 22 |
2 files changed, 16 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index daa97b56ed66..30779973b204 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -639,8 +639,14 @@ class ActivityStarter { mRequest.intent, caller); } - // Do not lock the resolving to avoid potential deadlock. + // If the caller hasn't already resolved the activity, we're willing + // to do so here, but because that may require acquiring the AM lock + // as part of calculating the NeededUriGrants, we must never hold + // the WM lock here to avoid deadlocking. if (mRequest.activityInfo == null) { + if (Thread.holdsLock(mService.mGlobalLock)) { + Slog.wtf(TAG, new IllegalStateException("Caller must not hold WM lock")); + } mRequest.resolveActivity(mSupervisor); } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index cf453c7feef8..205523b2a119 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -6174,12 +6174,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent, boolean allowBackgroundActivityStart) { assertPackageMatchesCallingUid(callingPackage); - synchronized (mGlobalLock) { - return getActivityStartController().startActivitiesInPackage(uid, realCallingPid, - realCallingUid, callingPackage, callingFeatureId, intents, resolvedTypes, - resultTo, options, userId, validateIncomingUser, originatingPendingIntent, - allowBackgroundActivityStart); - } + return getActivityStartController().startActivitiesInPackage(uid, realCallingPid, + realCallingUid, callingPackage, callingFeatureId, intents, resolvedTypes, + resultTo, options, userId, validateIncomingUser, originatingPendingIntent, + allowBackgroundActivityStart); } @Override @@ -6190,13 +6188,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent, boolean allowBackgroundActivityStart) { assertPackageMatchesCallingUid(callingPackage); - synchronized (mGlobalLock) { - return getActivityStartController().startActivityInPackage(uid, realCallingPid, - realCallingUid, callingPackage, callingFeatureId, intent, resolvedType, - resultTo, resultWho, requestCode, startFlags, options, userId, inTask, - reason, validateIncomingUser, originatingPendingIntent, - allowBackgroundActivityStart); - } + return getActivityStartController().startActivityInPackage(uid, realCallingPid, + realCallingUid, callingPackage, callingFeatureId, intent, resolvedType, + resultTo, resultWho, requestCode, startFlags, options, userId, inTask, + reason, validateIncomingUser, originatingPendingIntent, + allowBackgroundActivityStart); } @Override |