< 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 >