< prev index next >

src/hotspot/share/jvmci/jvmciRuntime.cpp

Print this page
rev 47819 : imported patch 10.07.open.rebase_20171110.dcubed

*** 40,49 **** --- 40,50 ---- #include "oops/objArrayOop.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/reflection.hpp" #include "runtime/sharedRuntime.hpp" + #include "runtime/threadSMR.hpp" #include "utilities/debug.hpp" #include "utilities/defaultStream.hpp" #include "utilities/macros.hpp" #if defined(_MSC_VER)
*** 596,611 **** JRT_ENTRY(jint, JVMCIRuntime::identity_hash_code(JavaThread* thread, oopDesc* obj)) return (jint) obj->identity_hash(); JRT_END JRT_ENTRY(jboolean, JVMCIRuntime::thread_is_interrupted(JavaThread* thread, oopDesc* receiver, jboolean clear_interrupted)) - // Ensure that the C++ Thread and OSThread structures aren't freed before we operate. - // This locking requires thread_in_vm which is why this method cannot be JRT_LEAF. Handle receiverHandle(thread, receiver); ! MutexLockerEx ml(thread->threadObj() == (void*)receiver ? NULL : Threads_lock); JavaThread* receiverThread = java_lang_Thread::thread(receiverHandle()); ! if (receiverThread == NULL) { // The other thread may exit during this process, which is ok so return false. return JNI_FALSE; } else { return (jint) Thread::is_interrupted(receiverThread, clear_interrupted != 0); } --- 597,613 ---- JRT_ENTRY(jint, JVMCIRuntime::identity_hash_code(JavaThread* thread, oopDesc* obj)) return (jint) obj->identity_hash(); JRT_END JRT_ENTRY(jboolean, JVMCIRuntime::thread_is_interrupted(JavaThread* thread, oopDesc* receiver, jboolean clear_interrupted)) Handle receiverHandle(thread, receiver); ! // A nested ThreadsListHandle may require the Threads_lock which ! // requires thread_in_vm which is why this method cannot be JRT_LEAF. ! ThreadsListHandle tlh; ! JavaThread* receiverThread = java_lang_Thread::thread(receiverHandle()); ! if (receiverThread == NULL || (EnableThreadSMRExtraValidityChecks && !tlh.includes(receiverThread))) { // The other thread may exit during this process, which is ok so return false. return JNI_FALSE; } else { return (jint) Thread::is_interrupted(receiverThread, clear_interrupted != 0); }
< prev index next >