From 1fcf05bbfcb452e9270c4c99fa9606e4d270bea8 Mon Sep 17 00:00:00 2001 From: Weilin Xu Date: Wed, 19 Oct 2022 20:04:43 +0000 Subject: [PATCH] Move close callback outside ProgramList lock The callback of on-close listener in program list was moved outside of the lock in porgram list to avoid the deadlock between program list and tuner adpater. Bug: 254505565 Test: atest android.radio.cts.RadioTunerTest Change-Id: I9c668c63a578ba04b52747e0ef96e9e67cc00b72 --- core/java/android/hardware/radio/ProgramList.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/hardware/radio/ProgramList.java b/core/java/android/hardware/radio/ProgramList.java index f2525d17e30a8..ade9fd68ade8b 100644 --- a/core/java/android/hardware/radio/ProgramList.java +++ b/core/java/android/hardware/radio/ProgramList.java @@ -160,6 +160,7 @@ public final class ProgramList implements AutoCloseable { * Disables list updates and releases all resources. */ public void close() { + OnCloseListener onCompleteListenersCopied = null; synchronized (mLock) { if (mIsClosed) return; mIsClosed = true; @@ -167,10 +168,14 @@ public final class ProgramList implements AutoCloseable { mListCallbacks.clear(); mOnCompleteListeners.clear(); if (mOnCloseListener != null) { - mOnCloseListener.onClose(); + onCompleteListenersCopied = mOnCloseListener; mOnCloseListener = null; } } + + if (onCompleteListenersCopied != null) { + onCompleteListenersCopied.onClose(); + } } void apply(Chunk chunk) {