提交 fc3e5d5d 编写于 作者: R raymondzheng

ijkplayer: fix NewGlobalRef crash

上级 46ec4a07
......@@ -59,29 +59,29 @@ static int ijkio_androidio_open(IjkURLContext *h, const char *url, int flags, Ij
return -1;
}
if (!ijkio_androidio)
return AVERROR(EINVAL);
if (JNI_OK != SDL_JNI_SetupThreadEnv(&env)) {
av_log(h, AV_LOG_ERROR, "%s: SDL_JNI_SetupThreadEnv: failed", __func__);
return AVERROR(EINVAL);
}
if (!ijkio_androidio)
return AVERROR(EINVAL);
c->ijkio_androidio = (*env)->NewGlobalRef(env, ijkio_androidio);
if (J4A_ExceptionCheck__catchAll(env) || !c->ijkio_androidio) {
return AVERROR(ENOMEM);
}
jstring urlString = NULL;
urlString = (*env)->NewStringUTF(env, url);
jint ret = J4AC_IAndroidIO__open(env, ijkio_androidio, urlString);
jint ret = J4AC_IAndroidIO__open(env, c->ijkio_androidio, urlString);
if (J4A_ExceptionCheck__catchAll(env)) {
return AVERROR(EINVAL);
} else if (ret < 0) {
return ret;
}
c->ijkio_androidio = (*env)->NewGlobalRef(env, ijkio_androidio);
if (J4A_ExceptionCheck__catchAll(env) || !c->ijkio_androidio) {
return AVERROR(ENOMEM);
}
return 0;
}
......@@ -165,14 +165,14 @@ static int ijkio_androidio_close(IjkURLContext *h) {
IjkIOAndroidioContext *c = h->priv_data;
JNIEnv *env = NULL;
if (!c || !c->ijkio_androidio)
return AVERROR(EINVAL);
if (JNI_OK != SDL_JNI_SetupThreadEnv(&env)) {
av_log(h, AV_LOG_ERROR, "%s: SDL_JNI_SetupThreadEnv: failed", __func__);
return AVERROR(EINVAL);
}
if (!c || !c->ijkio_androidio)
return AVERROR(EINVAL);
J4A_DeleteGlobalRef__p(env, &c->jbuffer);
if (c->ijkio_androidio) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册