From d13b030dc468b9a8d1da042c539fafa72ca882b5 Mon Sep 17 00:00:00 2001 From: Phil Burk Date: Sat, 18 Dec 2021 19:42:34 +0000 Subject: [PATCH] MidiService: clear status when device unbound This can help prevent MIDI input ports from getting stuck in the open position. Bug: 210724686 Test: see bug for repro steps Test: atest CtsMidiTestCases Test: https://source.android.com/devices/audio/midi_test.html Test: Check status with: adb shell dumpsys midi Change-Id: I9fe45eeb2d51356d114ae5a1a175e3d1f6977328 Merged-In: I9fe45eeb2d51356d114ae5a1a175e3d1f6977328 (cherry picked from commit 59a36aeb0dc42af2b50151fee9786777b43d57d1) --- services/midi/java/com/android/server/midi/MidiService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/midi/java/com/android/server/midi/MidiService.java b/services/midi/java/com/android/server/midi/MidiService.java index d0205ae24f85..ca31efcdf3d2 100644 --- a/services/midi/java/com/android/server/midi/MidiService.java +++ b/services/midi/java/com/android/server/midi/MidiService.java @@ -340,6 +340,11 @@ public class MidiService extends IMidiManager.Stub { IBinder binder = server.asBinder(); mDevicesByServer.remove(binder); + // Clearing mDeviceStatus is needed because setDeviceStatus() + // relies on finding the device in mDevicesByServer. + // So the status can no longer be updated after we remove it. + // Then we can end up with input ports that are stuck open. + mDeviceStatus = null; try { server.closeDevice();