[0002] Fix segfault from bad CiCam closure
Cleaning up of CiCam resources should not be conditional on nativeUnlinkCiCam success. Connect + disconnect fails for TunerHAL impl that does not support CiCam.
Bug: 356779633
Test: test on cuddlefish
Flag: EXEMPT bugfix
(cherry picked from https://android-review.googlesource.com/q/commit:172287dd6c8aedb56c73234e38f0cb37860154ed)
Merged-In: If05b33f6bc0c598195c83c15d512c249807228ec
Change-Id: If05b33f6bc0c598195c83c15d512c249807228ec
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index f28c2c1..49b0bc9 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -888,19 +888,14 @@
try {
if (mFrontendCiCamHandle != null) {
if (DEBUG) {
- Log.d(TAG, "unlinking CiCam : " + mFrontendCiCamHandle + " for " + mClientId);
+ Log.d(TAG, "releasing CiCam : " + mFrontendCiCamHandle + " for " + mClientId);
}
- int result = nativeUnlinkCiCam(mFrontendCiCamId);
- if (result == RESULT_SUCCESS) {
- mTunerResourceManager.releaseCiCam(mFrontendCiCamHandle, mClientId);
- replicateCiCamSettings(null);
- } else {
- Log.e(TAG, "nativeUnlinkCiCam(" + mFrontendCiCamHandle + ") for mClientId:"
- + mClientId + "failed with result:" + result);
- }
+ nativeUnlinkCiCam(mFrontendCiCamId);
+ mTunerResourceManager.releaseCiCam(mFrontendCiCamHandle, mClientId);
+ replicateCiCamSettings(null);
} else {
if (DEBUG) {
- Log.d(TAG, "NOT unlinking CiCam : " + mClientId);
+ Log.d(TAG, "NOT releasing CiCam : " + mClientId);
}
}
} finally {
@@ -1665,11 +1660,9 @@
if (mFrontendCiCamHandle != null && mFrontendCiCamId != null
&& mFrontendCiCamId == ciCamId) {
int result = nativeUnlinkCiCam(ciCamId);
- if (result == RESULT_SUCCESS) {
- mTunerResourceManager.releaseCiCam(mFrontendCiCamHandle, mClientId);
- mFrontendCiCamId = null;
- mFrontendCiCamHandle = null;
- }
+ mTunerResourceManager.releaseCiCam(mFrontendCiCamHandle, mClientId);
+ mFrontendCiCamId = null;
+ mFrontendCiCamHandle = null;
return result;
}
}