summaryrefslogtreecommitdiff
authoryan 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)
commit88881aa0f960071d7b0bb5bfc10a4a989204faa8 (patch)
tree5b6601131dab8834b16e0598bf9bef66005390e2
parente260d9677d4ea3b53ec4d1d1f36aead268ea2882 (diff)
downloadTvInput-88881aa0f960071d7b0bb5bfc10a4a989204faa8.zip
TvInput-88881aa0f960071d7b0bb5bfc10a4a989204faa8.tar.gz
TvInput-88881aa0f960071d7b0bb5bfc10a4a989204faa8.tar.bz2
DTVCC_JNI: Add lock to prevent nullable call
PD#158380 Change-Id: I04153d5b4306c8f458d30286aa4afe4dd033e709
Diffstat
-rw-r--r--DroidLogicTvInput/jni/DTVSubtitle.cpp21
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);
}
}