Fix deadlock by not acquiring lock when reporting proximity
There is a deadlock situation from AttentionManagerService acquiring lock before callings back to its clients with the proximity update. This can cause a deadlock because the clients, while holding their own locks, can call AttentionManagerService again. Thread 1: Acquires attention lock -> AttentionManager Service reports proximityUpdate to VoiceInteraction -> tries to acquire voice lock Thread 2: Acquires voice lock -> VoiceService tries to cancel proximity updates -> tries to acquire attention lock The deadlock can be fixed by removing the acquiring attention lock step before reporting proximityUpdates to the clients. Bug: 261143716 Test: atest CtsAttentionServiceDeviceTestCases Change-Id: I9f7d520cbcfd57032a9476853acad025fd7a6b95
This commit is contained in:
@@ -668,8 +668,8 @@ public class AttentionManagerService extends SystemService {
|
|||||||
mIProximityUpdateCallback = new IProximityUpdateCallback.Stub() {
|
mIProximityUpdateCallback = new IProximityUpdateCallback.Stub() {
|
||||||
@Override
|
@Override
|
||||||
public void onProximityUpdate(double distance) {
|
public void onProximityUpdate(double distance) {
|
||||||
|
mCallbackInternal.onProximityUpdate(distance);
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
mCallbackInternal.onProximityUpdate(distance);
|
|
||||||
freeIfInactiveLocked();
|
freeIfInactiveLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user