Loading media/java/android/media/tv/tuner/Lnb.java +45 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ import android.hardware.tv.tuner.LnbPosition; import android.hardware.tv.tuner.LnbTone; import android.hardware.tv.tuner.LnbVoltage; import android.media.tv.tuner.Tuner.Result; import android.media.tv.tunerresourcemanager.TunerResourceManager; import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -147,10 +149,13 @@ public class Lnb implements AutoCloseable { public static final int EVENT_TYPE_LNB_OVERLOAD = LnbEventType.LNB_OVERLOAD; private static final String TAG = "Lnb"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Map<LnbCallback, Executor> mCallbackMap = new HashMap<LnbCallback, Executor>(); Tuner mOwner; TunerResourceManager mTunerResourceManager; int mClientId; private final Object mCallbackLock = new Object(); Loading @@ -174,6 +179,10 @@ public class Lnb implements AutoCloseable { } } setOwner(tuner); if (mOwner != null) { mTunerResourceManager = mOwner.getTunerResourceManager(); mClientId = mOwner.getClientId(); } } /** Loading Loading @@ -210,6 +219,8 @@ public class Lnb implements AutoCloseable { Objects.requireNonNull(newOwner, "newOwner must not be null"); synchronized (mLock) { mOwner = newOwner; mTunerResourceManager = newOwner.getTunerResourceManager(); mClientId = newOwner.getClientId(); } } Loading Loading @@ -317,6 +328,8 @@ public class Lnb implements AutoCloseable { * Releases the LNB instance. */ public void close() { acquireTRMSLock("close()"); try { synchronized (mLock) { if (mIsClosed) { return; Loading @@ -333,5 +346,24 @@ public class Lnb implements AutoCloseable { mCallbackMap.clear(); } } } finally { releaseTRMSLock(); } } private void acquireTRMSLock(String functionNameForLog) { if (DEBUG) { Log.d(TAG, "ATTEMPT:acquireLock() in " + functionNameForLog + "for clientId:" + mClientId); } if (!mTunerResourceManager.acquireLock(mClientId)) { Log.e(TAG, "FAILED:acquireLock() in " + functionNameForLog + " for clientId:" + mClientId + " - this can cause deadlock between" + " Tuner API calls and onReclaimResources()"); } } private void releaseTRMSLock() { mTunerResourceManager.releaseLock(mClientId); } } media/java/android/media/tv/tuner/Tuner.java +7 −0 Original line number Diff line number Diff line Loading @@ -903,6 +903,9 @@ public class Tuner implements AutoCloseable { } } /** * Releases Lnb resource if held. TRMS lock must be acquired prior to calling this function. */ private void closeLnb() { mLnbLock.lock(); try { Loading Loading @@ -2806,6 +2809,10 @@ public class Tuner implements AutoCloseable { return mClientId; } /* package */ TunerResourceManager getTunerResourceManager() { return mTunerResourceManager; } private void acquireTRMSLock(String functionNameForLog) { if (DEBUG) { Log.d(TAG, "ATTEMPT:acquireLock() in " + functionNameForLog Loading Loading
media/java/android/media/tv/tuner/Lnb.java +45 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ import android.hardware.tv.tuner.LnbPosition; import android.hardware.tv.tuner.LnbTone; import android.hardware.tv.tuner.LnbVoltage; import android.media.tv.tuner.Tuner.Result; import android.media.tv.tunerresourcemanager.TunerResourceManager; import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -147,10 +149,13 @@ public class Lnb implements AutoCloseable { public static final int EVENT_TYPE_LNB_OVERLOAD = LnbEventType.LNB_OVERLOAD; private static final String TAG = "Lnb"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Map<LnbCallback, Executor> mCallbackMap = new HashMap<LnbCallback, Executor>(); Tuner mOwner; TunerResourceManager mTunerResourceManager; int mClientId; private final Object mCallbackLock = new Object(); Loading @@ -174,6 +179,10 @@ public class Lnb implements AutoCloseable { } } setOwner(tuner); if (mOwner != null) { mTunerResourceManager = mOwner.getTunerResourceManager(); mClientId = mOwner.getClientId(); } } /** Loading Loading @@ -210,6 +219,8 @@ public class Lnb implements AutoCloseable { Objects.requireNonNull(newOwner, "newOwner must not be null"); synchronized (mLock) { mOwner = newOwner; mTunerResourceManager = newOwner.getTunerResourceManager(); mClientId = newOwner.getClientId(); } } Loading Loading @@ -317,6 +328,8 @@ public class Lnb implements AutoCloseable { * Releases the LNB instance. */ public void close() { acquireTRMSLock("close()"); try { synchronized (mLock) { if (mIsClosed) { return; Loading @@ -333,5 +346,24 @@ public class Lnb implements AutoCloseable { mCallbackMap.clear(); } } } finally { releaseTRMSLock(); } } private void acquireTRMSLock(String functionNameForLog) { if (DEBUG) { Log.d(TAG, "ATTEMPT:acquireLock() in " + functionNameForLog + "for clientId:" + mClientId); } if (!mTunerResourceManager.acquireLock(mClientId)) { Log.e(TAG, "FAILED:acquireLock() in " + functionNameForLog + " for clientId:" + mClientId + " - this can cause deadlock between" + " Tuner API calls and onReclaimResources()"); } } private void releaseTRMSLock() { mTunerResourceManager.releaseLock(mClientId); } }
media/java/android/media/tv/tuner/Tuner.java +7 −0 Original line number Diff line number Diff line Loading @@ -903,6 +903,9 @@ public class Tuner implements AutoCloseable { } } /** * Releases Lnb resource if held. TRMS lock must be acquired prior to calling this function. */ private void closeLnb() { mLnbLock.lock(); try { Loading Loading @@ -2806,6 +2809,10 @@ public class Tuner implements AutoCloseable { return mClientId; } /* package */ TunerResourceManager getTunerResourceManager() { return mTunerResourceManager; } private void acquireTRMSLock(String functionNameForLog) { if (DEBUG) { Log.d(TAG, "ATTEMPT:acquireLock() in " + functionNameForLog Loading