Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b16c57b authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

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
parent 556bdce1
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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,