author | yan yan <yan.yan@amlogic.com> | 2018-01-10 11:27:08 (GMT) |
---|---|---|
committer | Sandy Luo <sandy.luo@amlogic.com> | 2018-01-19 05:57:55 (GMT) |
commit | 88881aa0f960071d7b0bb5bfc10a4a989204faa8 (patch) | |
tree | 5b6601131dab8834b16e0598bf9bef66005390e2 | |
parent | e260d9677d4ea3b53ec4d1d1f36aead268ea2882 (diff) | |
download | TvInput-88881aa0f960071d7b0bb5bfc10a4a989204faa8.zip TvInput-88881aa0f960071d7b0bb5bfc10a4a989204faa8.tar.gz TvInput-88881aa0f960071d7b0bb5bfc10a4a989204faa8.tar.bz2 |
DTVCC_JNI: Add lock to prevent nullable call
PD#158380
Change-Id: I04153d5b4306c8f458d30286aa4afe4dd033e709
-rw-r--r-- | DroidLogicTvInput/jni/DTVSubtitle.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/DroidLogicTvInput/jni/DTVSubtitle.cpp b/DroidLogicTvInput/jni/DTVSubtitle.cpp index 520d4ee..69c1306 100644 --- a/DroidLogicTvInput/jni/DTVSubtitle.cpp +++ b/DroidLogicTvInput/jni/DTVSubtitle.cpp @@ -411,8 +411,10 @@ unsigned long getSDKVersion() sub_clear(env, obj); if (data->obj) { + pthread_mutex_lock(&data->lock); env->DeleteGlobalRef(data->obj); data->obj = NULL; + pthread_mutex_unlock(&data->lock); } pthread_mutex_destroy(&data->lock); @@ -554,7 +556,10 @@ error: close_dmx(data); AM_SUB2_Destroy(data->sub_handle); AM_PES_Destroy(data->pes_handle); - sub_update(data->obj); + pthread_mutex_lock(&data->lock); + if (data->obj) + sub_update(data->obj); + pthread_mutex_unlock(&data->lock); data->sub_handle = NULL; data->pes_handle = NULL; @@ -571,7 +576,10 @@ error: data->pes_handle = NULL; AM_TT2_Stop(data->tt_handle); - sub_update(data->obj); + pthread_mutex_lock(&data->lock); + if (data->obj) + sub_update(data->obj); + pthread_mutex_unlock(&data->lock); return 0; } @@ -718,7 +726,10 @@ error: LOGI("stop cc"); AM_CC_Destroy(data->cc_handle); - sub_update(data->obj); + pthread_mutex_lock(&data->lock); + if (data->obj) + sub_update(data->obj); + pthread_mutex_unlock(&data->lock); data->cc_handle = NULL; @@ -751,15 +762,19 @@ error: if (active) { if (data->obj) { + pthread_mutex_lock(&data->lock); env->DeleteGlobalRef(data->obj); data->obj = NULL; + pthread_mutex_unlock(&data->lock); } data->obj = env->NewGlobalRef(obj); } else { if (env->IsSameObject(data->obj, obj)) { + pthread_mutex_lock(&data->lock); env->DeleteGlobalRef(data->obj); data->obj = NULL; + pthread_mutex_unlock(&data->lock); } } |