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