Fix deadlock between Tuner.requestDescrambler() and resource reclaim
Bug: 302158911
Test: atest TunerTest
Change-Id: If6e760619fe204a7cd58a39e8b462cb990c3ca6d
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 9924fae..09f09b9 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -2409,13 +2409,16 @@
@RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER)
@Nullable
public Descrambler openDescrambler() {
+ acquireTRMSLock("openDescrambler()");
mDemuxLock.lock();
try {
- if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX, mDemuxLock)) {
+ // no need to unlock mDemuxLock (so pass null instead) as TRMS lock is already acquired
+ if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX, null)) {
return null;
}
return requestDescrambler();
} finally {
+ releaseTRMSLock();
mDemuxLock.unlock();
}
}