re PR java/29812 (env->klass value is not updated during the native calls)
PR java/29812: * testsuite/libjava.jni/pr29812.java: New file. * testsuite/libjava.jni/pr29812_injar.java: New file. * testsuite/libjava.jni/pr29812_injar.jar: New file. * testsuite/libjava.jni/pr29812.out: New file. * testsuite/libjava.jni/pr29812_injar.c: New file. * testsuite/libjava.jni/pr29812_injar.h: New file. * testsuite/libjava.jni/pr29812.jar: New file. * testsuite/libjava.jni/pr29812.c: New file. * testsuite/libjava.jni/pr29812.h: New file. * testsuite/libjava.jni/jni.exp (gcj_jni_get_cxxflags_invocation): New proc. (gcj_jni_invocation_test_one): Use it. (gcj_jni_pr29812): New proc. (gcj_jni_run): Use it. * java/lang/natRuntime.cc (_load): Push a new system frame before calling JNI_OnLoad. * include/jvm.h (_Jv_JNI_PopSystemFrame): Declare. (_Jv_GetJNIEnvNewFrameWithLoader): Likewise. * jni.cc (struct _Jv_JNI_LocalFrame) <marker>: Now unsigned char. <allocated_p>: Now bool. <loader>: New field. (_Jv_JNI_EnsureLocalCapacity): Updated. (_Jv_JNI_NewLocalRef): Likewise. (_Jv_JNI_NewLocalRef): Likewise. (_Jv_JNI_PopLocalFrame): Likewise. (_Jv_JNI_FindClass): Likewise. (_Jv_GetJNIEnvNewFrame): Likewise. (_Jv_JNI_AttachCurrentThread): Likewise. (_Jv_GetJNIEnvNewFrameWithLoader): New function. (_Jv_GetJNIEnvNewFrame): Use it. * include/jni_md.h (_CLASSPATH_JNIENV_CONTENTS): Removed 'klass'. From-SVN: r121064
This commit is contained in:
parent
c8832aae41
commit
262fa8a4b5
15 changed files with 255 additions and 54 deletions
|
@ -207,7 +207,14 @@ java::lang::Runtime::_load (jstring path, jboolean do_search)
|
|||
// FIXME: what?
|
||||
return;
|
||||
}
|
||||
|
||||
// Push a new frame so that JNI_OnLoad will get the right class
|
||||
// loader if it calls FindClass.
|
||||
::java::lang::ClassLoader *loader
|
||||
= _Jv_StackTrace::GetFirstNonSystemClassLoader();
|
||||
JNIEnv *env = _Jv_GetJNIEnvNewFrameWithLoader (loader);
|
||||
jint vers = ((jint (JNICALL *) (JavaVM *, void *)) onload) (vm, NULL);
|
||||
_Jv_JNI_PopSystemFrame (env);
|
||||
if (vers != JNI_VERSION_1_1 && vers != JNI_VERSION_1_2
|
||||
&& vers != JNI_VERSION_1_4)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue