system server watchdog caused by deadlock
There is deadlock among ActivityManagerService, ActivityTaskManagerService
and ConnectionServiceWrapper. Move stopLockTaskModeInternal out of mGlobalLock scope.
This will remove the deadlock
Bug: 159213837
Bug: 162950591
Test: presubmit
Change-Id: I6aee6f9837bac22e480f42124bfcdba991e0fa1a
(cherry picked from commit 3a17ba2f25)
This commit is contained in:
committed by
Agatha Man
parent
3743d5526a
commit
cb4dbb8b80
@@ -2997,13 +2997,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
|
||||
@Override
|
||||
public void stopLockTaskModeByToken(IBinder token) {
|
||||
synchronized (mGlobalLock) {
|
||||
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
|
||||
if (r == null) {
|
||||
return;
|
||||
}
|
||||
stopLockTaskModeInternal(r.getTask(), false /* isSystemCaller */);
|
||||
}
|
||||
stopLockTaskModeInternal(token, false /* isSystemCaller */);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3045,11 +3039,19 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
private void stopLockTaskModeInternal(@Nullable Task task, boolean isSystemCaller) {
|
||||
private void stopLockTaskModeInternal(@Nullable IBinder token, boolean isSystemCaller) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
long ident = Binder.clearCallingIdentity();
|
||||
try {
|
||||
synchronized (mGlobalLock) {
|
||||
Task task = null;
|
||||
if (token != null) {
|
||||
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
|
||||
if (r == null) {
|
||||
return;
|
||||
}
|
||||
task = r.getTask();
|
||||
}
|
||||
getLockTaskController().stopLockTaskMode(task, isSystemCaller, callingUid);
|
||||
}
|
||||
// Launch in-call UI if a call is ongoing. This is necessary to allow stopping the lock
|
||||
|
||||
Reference in New Issue
Block a user