< prev index next >
modules/media/src/main/native/jfxmedia/jni/JavaInputStreamCallbacks.cpp
Print this page
rev 9506 : 8156563: JavaFX Ensemble8 media sample hang and crash
Reviewed-by: almatvee, kcr
*** 1,7 ****
/*
! * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 99,111 ****
bool CJavaInputStreamCallbacks::NeedBuffer()
{
bool result = false;
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (m_ConnectionHolder && pEnv)
! {
! result = (pEnv->CallBooleanMethod(m_ConnectionHolder, m_NeedBufferMID) == JNI_TRUE);
javaEnv.reportException();
}
return result;
}
--- 99,116 ----
bool CJavaInputStreamCallbacks::NeedBuffer()
{
bool result = false;
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
!
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = (pEnv->CallBooleanMethod(connection, m_NeedBufferMID) == JNI_TRUE);
! pEnv->DeleteLocalRef(connection);
! }
!
javaEnv.reportException();
}
return result;
}
*** 114,125 ****
{
int result = -1;
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (m_ConnectionHolder && pEnv) {
! result = pEnv->CallIntMethod(m_ConnectionHolder, m_ReadNextBlockMID);
if (javaEnv.clearException()) {
result = -2;
}
}
--- 119,135 ----
{
int result = -1;
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = pEnv->CallIntMethod(connection, m_ReadNextBlockMID);
! pEnv->DeleteLocalRef(connection);
! }
!
if (javaEnv.clearException()) {
result = -2;
}
}
*** 130,142 ****
{
int result = -1;
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (m_ConnectionHolder && pEnv)
! {
! result = pEnv->CallIntMethod(m_ConnectionHolder, m_ReadBlockMID, position, size);
if (javaEnv.clearException()) {
result = -2;
}
}
--- 140,156 ----
{
int result = -1;
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = pEnv->CallIntMethod(connection, m_ReadBlockMID, position, size);
! pEnv->DeleteLocalRef(connection);
! }
!
if (javaEnv.clearException()) {
result = -2;
}
}
*** 145,173 ****
void CJavaInputStreamCallbacks::CopyBlock(void* destination, int size)
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (m_ConnectionHolder && pEnv)
! {
! jobject buffer = pEnv->GetObjectField(m_ConnectionHolder, m_BufferFID);
void *data = pEnv->GetDirectBufferAddress(buffer);
memcpy(destination, data, size);
pEnv->DeleteLocalRef(buffer);
}
}
bool CJavaInputStreamCallbacks::IsSeekable()
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
bool result = false;
! if (m_ConnectionHolder && pEnv)
! {
! result = (pEnv->CallBooleanMethod(m_ConnectionHolder, m_IsSeekableMID) == JNI_TRUE);
javaEnv.reportException();
}
return result;
}
--- 159,194 ----
void CJavaInputStreamCallbacks::CopyBlock(void* destination, int size)
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! jobject buffer = pEnv->GetObjectField(connection, m_BufferFID);
void *data = pEnv->GetDirectBufferAddress(buffer);
memcpy(destination, data, size);
pEnv->DeleteLocalRef(buffer);
+ pEnv->DeleteLocalRef(connection);
+ }
}
}
bool CJavaInputStreamCallbacks::IsSeekable()
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
bool result = false;
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = (pEnv->CallBooleanMethod(connection, m_IsSeekableMID) == JNI_TRUE);
! pEnv->DeleteLocalRef(connection);
! }
!
javaEnv.reportException();
}
return result;
}
*** 176,188 ****
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
bool result = false;
! if (m_ConnectionHolder && pEnv)
! {
! result = (pEnv->CallBooleanMethod(m_ConnectionHolder, m_IsRandomAccessMID) == JNI_TRUE);
javaEnv.reportException();
}
return result;
}
--- 197,213 ----
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
bool result = false;
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = (pEnv->CallBooleanMethod(connection, m_IsRandomAccessMID) == JNI_TRUE);
! pEnv->DeleteLocalRef(connection);
! }
!
javaEnv.reportException();
}
return result;
}
*** 191,217 ****
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
jlong result = -1;
! if (m_ConnectionHolder && pEnv)
! {
! result = pEnv->CallLongMethod(m_ConnectionHolder, m_SeekMID, (jlong)position);
javaEnv.reportException();
}
return (int64_t)result;
}
void CJavaInputStreamCallbacks::CloseConnection()
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
! if (m_ConnectionHolder && pEnv)
! {
! pEnv->CallVoidMethod(m_ConnectionHolder, m_CloseConnectionMID);
javaEnv.reportException();
pEnv->DeleteGlobalRef(m_ConnectionHolder);
m_ConnectionHolder = NULL;
}
}
--- 216,252 ----
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
jlong result = -1;
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = pEnv->CallLongMethod(connection, m_SeekMID, (jlong)position);
! pEnv->DeleteLocalRef(connection);
! }
!
javaEnv.reportException();
}
return (int64_t)result;
}
void CJavaInputStreamCallbacks::CloseConnection()
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
!
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! pEnv->CallVoidMethod(connection, m_CloseConnectionMID);
! pEnv->DeleteLocalRef(connection);
!
javaEnv.reportException();
+ }
+
pEnv->DeleteGlobalRef(m_ConnectionHolder);
m_ConnectionHolder = NULL;
}
}
*** 219,231 ****
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
int result = 0;
! if (m_ConnectionHolder && pEnv)
! {
! result = pEnv->CallIntMethod(m_ConnectionHolder, m_PropertyMID, (jint)prop, (jint)value);
javaEnv.reportException();
}
return result;
}
--- 254,270 ----
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
int result = 0;
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = pEnv->CallIntMethod(connection, m_PropertyMID, (jint)prop, (jint)value);
! pEnv->DeleteLocalRef(connection);
! }
!
javaEnv.reportException();
}
return result;
}
*** 234,246 ****
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
int result = 0;
! if (m_ConnectionHolder && pEnv)
! {
! result = pEnv->CallIntMethod(m_ConnectionHolder, m_GetStreamSizeMID);
javaEnv.reportException();
}
return result;
}
--- 273,289 ----
{
CJavaEnvironment javaEnv(m_jvm);
JNIEnv *pEnv = javaEnv.getEnvironment();
int result = 0;
! if (pEnv) {
! jobject connection = pEnv->NewLocalRef(m_ConnectionHolder);
! if (connection) {
! result = pEnv->CallIntMethod(connection, m_GetStreamSizeMID);
! pEnv->DeleteLocalRef(connection);
! }
!
javaEnv.reportException();
}
return result;
}
< prev index next >