< prev index next >
src/share/vm/prims/jni.cpp
Print this page
*** 4184,4194 ****
if (args && (args->version != JNI_VERSION_1_1 || args->version != JNI_VERSION_1_2)) {
return JNI_EVERSION;
}
*/
! Thread* t = ThreadLocalStorage::get_thread_slow();
if (t != NULL) {
// If the thread has been attached this operation is a no-op
*(JNIEnv**)penv = ((JavaThread*) t)->jni_environment();
return JNI_OK;
}
--- 4184,4194 ----
if (args && (args->version != JNI_VERSION_1_1 || args->version != JNI_VERSION_1_2)) {
return JNI_EVERSION;
}
*/
! Thread* t = Thread::current_or_null();
if (t != NULL) {
// If the thread has been attached this operation is a no-op
*(JNIEnv**)penv = ((JavaThread*) t)->jni_environment();
return JNI_OK;
}
*** 4199,4212 ****
// Set correct safepoint info. The thread is going to call into Java when
// initializing the Java level thread object. Hence, the correct state must
// be set in order for the Safepoint code to deal with it correctly.
thread->set_thread_state(_thread_in_vm);
- // Must do this before initialize_thread_local_storage
thread->record_stack_base_and_size();
!
! thread->initialize_thread_local_storage();
if (!os::create_attached_thread(thread)) {
delete thread;
return JNI_ERR;
}
--- 4199,4210 ----
// Set correct safepoint info. The thread is going to call into Java when
// initializing the Java level thread object. Hence, the correct state must
// be set in order for the Safepoint code to deal with it correctly.
thread->set_thread_state(_thread_in_vm);
thread->record_stack_base_and_size();
! thread->initialize_thread_current();
if (!os::create_attached_thread(thread)) {
delete thread;
return JNI_ERR;
}
*** 4309,4320 ****
HOTSPOT_JNI_DETACHCURRENTTHREAD_ENTRY(vm);
VM_Exit::block_if_vm_exited();
JNIWrapper("DetachCurrentThread");
! // If the thread has been deattacted the operations is a no-op
! if (ThreadLocalStorage::thread() == NULL) {
HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN(JNI_OK);
return JNI_OK;
}
JavaThread* thread = JavaThread::current();
--- 4307,4318 ----
HOTSPOT_JNI_DETACHCURRENTTHREAD_ENTRY(vm);
VM_Exit::block_if_vm_exited();
JNIWrapper("DetachCurrentThread");
! // If the thread has already been detached the operations is a no-op
! if (Thread::current_or_null() == NULL) {
HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN(JNI_OK);
return JNI_OK;
}
JavaThread* thread = JavaThread::current();
*** 4367,4377 ****
#define JVMPI_VERSION_1 ((jint)0x10000001)
#define JVMPI_VERSION_1_1 ((jint)0x10000002)
#define JVMPI_VERSION_1_2 ((jint)0x10000003)
#endif // !JVMPI_VERSION_1
! Thread* thread = ThreadLocalStorage::thread();
if (thread != NULL && thread->is_Java_thread()) {
if (Threads::is_supported_jni_version_including_1_1(version)) {
*(JNIEnv**)penv = ((JavaThread*) thread)->jni_environment();
ret = JNI_OK;
return ret;
--- 4365,4375 ----
#define JVMPI_VERSION_1 ((jint)0x10000001)
#define JVMPI_VERSION_1_1 ((jint)0x10000002)
#define JVMPI_VERSION_1_2 ((jint)0x10000003)
#endif // !JVMPI_VERSION_1
! Thread* thread = Thread::current_or_null();
if (thread != NULL && thread->is_Java_thread()) {
if (Threads::is_supported_jni_version_including_1_1(version)) {
*(JNIEnv**)penv = ((JavaThread*) thread)->jni_environment();
ret = JNI_OK;
return ret;
< prev index next >