Fix system service crash on radio session death. DO NOT MERGE

This is a partial cherry-pick from ag/7063548

Bug: 140203726
Test: adb shell am start -S -W -n com.android.car.radio/.RadioActivity
      (multiple times)

Change-Id: I6f16ff6eb82fca63c697d284fb3f45c2bb2be38c
This commit is contained in:
Tomasz Wasilczyk
2019-12-19 13:03:38 -08:00
parent 556bdce162
commit 1b16c57b57

View File

@@ -233,18 +233,24 @@ class RadioModule {
}
private void fanoutAidlCallbackLocked(AidlCallbackRunnable runnable) {
List<TunerSession> deadSessions = null;
for (TunerSession tunerSession : mAidlTunerSessions) {
try {
runnable.run(tunerSession.mCallback);
} catch (DeadObjectException ex) {
// The other side died without calling close(), so just purge it from our
// records.
// The other side died without calling close(), so just purge it from our records.
Slog.e(TAG, "Removing dead TunerSession");
mAidlTunerSessions.remove(tunerSession);
if (deadSessions == null) {
deadSessions = new ArrayList<>();
}
deadSessions.add(tunerSession);
} catch (RemoteException ex) {
Slog.e(TAG, "Failed to invoke ITunerCallback: ", ex);
}
}
if (deadSessions != null) {
mAidlTunerSessions.removeAll(deadSessions);
}
}
public android.hardware.radio.ICloseHandle addAnnouncementListener(@NonNull int[] enabledTypes,