hotspot/src/share/vm/prims/jvmtiEnv.cpp
changeset 4571 80b553bddc26
parent 2135 f82c3012ec86
child 4573 6358f8c9ed3b
equal deleted inserted replaced
4569:f372ea9e5ed4 4571:80b553bddc26
   131 
   131 
   132     oop thread_oop = JNIHandles::resolve_external_guard(thread);
   132     oop thread_oop = JNIHandles::resolve_external_guard(thread);
   133     if (thread_oop == NULL) {
   133     if (thread_oop == NULL) {
   134       return JVMTI_ERROR_INVALID_THREAD;
   134       return JVMTI_ERROR_INVALID_THREAD;
   135     }
   135     }
   136     if (!thread_oop->is_a(SystemDictionary::thread_klass())) {
   136     if (!thread_oop->is_a(SystemDictionary::Thread_klass())) {
   137       return JVMTI_ERROR_INVALID_THREAD;
   137       return JVMTI_ERROR_INVALID_THREAD;
   138     }
   138     }
   139     JavaThread* java_thread = java_lang_Thread::thread(thread_oop);
   139     JavaThread* java_thread = java_lang_Thread::thread(thread_oop);
   140     if (java_thread == NULL) {
   140     if (java_thread == NULL) {
   141       return JVMTI_ERROR_THREAD_NOT_ALIVE;
   141       return JVMTI_ERROR_THREAD_NOT_ALIVE;
   197     jclass jcls = classes[index];
   197     jclass jcls = classes[index];
   198     oop k_mirror = JNIHandles::resolve_external_guard(jcls);
   198     oop k_mirror = JNIHandles::resolve_external_guard(jcls);
   199     if (k_mirror == NULL) {
   199     if (k_mirror == NULL) {
   200       return JVMTI_ERROR_INVALID_CLASS;
   200       return JVMTI_ERROR_INVALID_CLASS;
   201     }
   201     }
   202     if (!k_mirror->is_a(SystemDictionary::class_klass())) {
   202     if (!k_mirror->is_a(SystemDictionary::Class_klass())) {
   203       return JVMTI_ERROR_INVALID_CLASS;
   203       return JVMTI_ERROR_INVALID_CLASS;
   204     }
   204     }
   205 
   205 
   206     if (java_lang_Class::is_primitive(k_mirror)) {
   206     if (java_lang_Class::is_primitive(k_mirror)) {
   207       return JVMTI_ERROR_UNMODIFIABLE_CLASS;
   207       return JVMTI_ERROR_UNMODIFIABLE_CLASS;
   264 jvmtiError
   264 jvmtiError
   265 JvmtiEnv::GetObjectSize(jobject object, jlong* size_ptr) {
   265 JvmtiEnv::GetObjectSize(jobject object, jlong* size_ptr) {
   266   oop mirror = JNIHandles::resolve_external_guard(object);
   266   oop mirror = JNIHandles::resolve_external_guard(object);
   267   NULL_CHECK(mirror, JVMTI_ERROR_INVALID_OBJECT);
   267   NULL_CHECK(mirror, JVMTI_ERROR_INVALID_OBJECT);
   268 
   268 
   269   if (mirror->klass() == SystemDictionary::class_klass()) {
   269   if (mirror->klass() == SystemDictionary::Class_klass()) {
   270     if (!java_lang_Class::is_primitive(mirror)) {
   270     if (!java_lang_Class::is_primitive(mirror)) {
   271         mirror = java_lang_Class::as_klassOop(mirror);
   271         mirror = java_lang_Class::as_klassOop(mirror);
   272         assert(mirror != NULL, "class for non-primitive mirror must exist");
   272         assert(mirror != NULL, "class for non-primitive mirror must exist");
   273     }
   273     }
   274   }
   274   }
   325   if (event_thread != NULL) {
   325   if (event_thread != NULL) {
   326     oop thread_oop = JNIHandles::resolve_external_guard(event_thread);
   326     oop thread_oop = JNIHandles::resolve_external_guard(event_thread);
   327     if (thread_oop == NULL) {
   327     if (thread_oop == NULL) {
   328       return JVMTI_ERROR_INVALID_THREAD;
   328       return JVMTI_ERROR_INVALID_THREAD;
   329     }
   329     }
   330     if (!thread_oop->is_a(SystemDictionary::thread_klass())) {
   330     if (!thread_oop->is_a(SystemDictionary::Thread_klass())) {
   331       return JVMTI_ERROR_INVALID_THREAD;
   331       return JVMTI_ERROR_INVALID_THREAD;
   332     }
   332     }
   333     java_thread = java_lang_Thread::thread(thread_oop);
   333     java_thread = java_lang_Thread::thread(thread_oop);
   334     if (java_thread == NULL) {
   334     if (java_thread == NULL) {
   335       return JVMTI_ERROR_THREAD_NOT_ALIVE;
   335       return JVMTI_ERROR_THREAD_NOT_ALIVE;
   618     thread_oop = JavaThread::current()->threadObj();
   618     thread_oop = JavaThread::current()->threadObj();
   619   } else {
   619   } else {
   620     thread_oop = JNIHandles::resolve_external_guard(thread);
   620     thread_oop = JNIHandles::resolve_external_guard(thread);
   621   }
   621   }
   622 
   622 
   623   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass())) {
   623   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass())) {
   624     return JVMTI_ERROR_INVALID_THREAD;
   624     return JVMTI_ERROR_INVALID_THREAD;
   625   }
   625   }
   626 
   626 
   627   // get most state bits
   627   // get most state bits
   628   state = (jint)java_lang_Thread::get_thread_status(thread_oop);
   628   state = (jint)java_lang_Thread::get_thread_status(thread_oop);
   856 // Threads_lock NOT held
   856 // Threads_lock NOT held
   857 // thread - NOT pre-checked
   857 // thread - NOT pre-checked
   858 jvmtiError
   858 jvmtiError
   859 JvmtiEnv::InterruptThread(jthread thread) {
   859 JvmtiEnv::InterruptThread(jthread thread) {
   860   oop thread_oop = JNIHandles::resolve_external_guard(thread);
   860   oop thread_oop = JNIHandles::resolve_external_guard(thread);
   861   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass()))
   861   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass()))
   862     return JVMTI_ERROR_INVALID_THREAD;
   862     return JVMTI_ERROR_INVALID_THREAD;
   863 
   863 
   864   JavaThread* current_thread  = JavaThread::current();
   864   JavaThread* current_thread  = JavaThread::current();
   865 
   865 
   866   // Todo: this is a duplicate of JVM_Interrupt; share code in future
   866   // Todo: this is a duplicate of JVM_Interrupt; share code in future
   893   if (thread == NULL) {
   893   if (thread == NULL) {
   894     thread_oop = current_thread->threadObj();
   894     thread_oop = current_thread->threadObj();
   895   } else {
   895   } else {
   896     thread_oop = JNIHandles::resolve_external_guard(thread);
   896     thread_oop = JNIHandles::resolve_external_guard(thread);
   897   }
   897   }
   898   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass()))
   898   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass()))
   899     return JVMTI_ERROR_INVALID_THREAD;
   899     return JVMTI_ERROR_INVALID_THREAD;
   900 
   900 
   901   Handle thread_obj(current_thread, thread_oop);
   901   Handle thread_obj(current_thread, thread_oop);
   902   typeArrayHandle    name;
   902   typeArrayHandle    name;
   903   ThreadPriority priority;
   903   ThreadPriority priority;
  1059 // proc - pre-checked for NULL
  1059 // proc - pre-checked for NULL
  1060 // arg - NULL is a valid value, must be checked
  1060 // arg - NULL is a valid value, must be checked
  1061 jvmtiError
  1061 jvmtiError
  1062 JvmtiEnv::RunAgentThread(jthread thread, jvmtiStartFunction proc, const void* arg, jint priority) {
  1062 JvmtiEnv::RunAgentThread(jthread thread, jvmtiStartFunction proc, const void* arg, jint priority) {
  1063   oop thread_oop = JNIHandles::resolve_external_guard(thread);
  1063   oop thread_oop = JNIHandles::resolve_external_guard(thread);
  1064   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass())) {
  1064   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass())) {
  1065     return JVMTI_ERROR_INVALID_THREAD;
  1065     return JVMTI_ERROR_INVALID_THREAD;
  1066   }
  1066   }
  1067   if (priority < JVMTI_THREAD_MIN_PRIORITY || priority > JVMTI_THREAD_MAX_PRIORITY) {
  1067   if (priority < JVMTI_THREAD_MIN_PRIORITY || priority > JVMTI_THREAD_MAX_PRIORITY) {
  1068     return JVMTI_ERROR_INVALID_PRIORITY;
  1068     return JVMTI_ERROR_INVALID_PRIORITY;
  1069   }
  1069   }