diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-12-30 23:17:48 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-12-30 23:17:48 +0000 |
commit | a4f4128f103579bf9391b94346f1a4322a5f028e (patch) | |
tree | a1681c370e452fdae0e2590597482ca09b9beac5 | |
parent | f8d764557157383ea93bf22d55d3329e8a5f4649 (diff) | |
parent | 6002ecda620e076f5afa6b16fd7a3b741ec59a20 (diff) |
Merge "free weakref to linearblock when it is destroy"
-rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 15 | ||||
-rw-r--r-- | media/jni/android_media_tv_Tuner.h | 1 |
2 files changed, 15 insertions, 1 deletions
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 5db672993df1..5daf8b0f88f8 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -171,6 +171,12 @@ static int IP_V6_LENGTH = 16; void DestroyCallback(const C2Buffer * /* buf */, void *arg) { android::sp<android::MediaEvent> event = (android::MediaEvent *)arg; + if (event->mLinearBlockObj != NULL) { + JNIEnv *env = android::AndroidRuntime::getJNIEnv(); + env->DeleteWeakGlobalRef(event->mLinearBlockObj); + event->mLinearBlockObj = NULL; + } + event->mAvHandleRefCnt--; event->finalize(); } @@ -182,6 +188,12 @@ LnbCallback::LnbCallback(jobject lnbObj, LnbId id) : mId(id) { mLnb = env->NewWeakGlobalRef(lnbObj); } +LnbCallback::~LnbCallback() { + JNIEnv *env = AndroidRuntime::getJNIEnv(); + env->DeleteWeakGlobalRef(mLnb); + mLnb = NULL; +} + Return<void> LnbCallback::onEvent(LnbEventType lnbEventType) { ALOGD("LnbCallback::onEvent, type=%d", lnbEventType); JNIEnv *env = AndroidRuntime::getJNIEnv(); @@ -305,6 +317,7 @@ MediaEvent::MediaEvent(sp<IFilter> iFilter, hidl_handle avHandle, JNIEnv *env = AndroidRuntime::getJNIEnv(); mMediaEventObj = env->NewWeakGlobalRef(obj); mAvHandle = native_handle_clone(avHandle.getNativeHandle()); + mLinearBlockObj = NULL; } MediaEvent::~MediaEvent() { @@ -367,7 +380,7 @@ jobject MediaEvent::getLinearBlock() { true); mLinearBlockObj = env->NewWeakGlobalRef(linearBlock); mAvHandleRefCnt++; - return mLinearBlockObj; + return linearBlock; } else { native_handle_close(const_cast<native_handle_t*>( reinterpret_cast<const native_handle_t*>(mIonHandle))); diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h index fd2995917475..c4deeaf887bb 100644 --- a/media/jni/android_media_tv_Tuner.h +++ b/media/jni/android_media_tv_Tuner.h @@ -73,6 +73,7 @@ namespace android { struct LnbCallback : public ILnbCallback { LnbCallback(jweak tunerObj, LnbId id); + ~LnbCallback(); virtual Return<void> onEvent(LnbEventType lnbEventType); virtual Return<void> onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage); jweak mLnb; |