hotspot/src/share/vm/prims/jvmtiEnv.cpp
changeset 4578 8c2778d19ffa
parent 4576 ad45d4e37837
parent 4573 6358f8c9ed3b
child 5547 f4b087cbb361
equal deleted inserted replaced
4577:18d854d28d4e 4578:8c2778d19ffa
   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;
   629     thread_oop = JavaThread::current()->threadObj();
   629     thread_oop = JavaThread::current()->threadObj();
   630   } else {
   630   } else {
   631     thread_oop = JNIHandles::resolve_external_guard(thread);
   631     thread_oop = JNIHandles::resolve_external_guard(thread);
   632   }
   632   }
   633 
   633 
   634   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass())) {
   634   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass())) {
   635     return JVMTI_ERROR_INVALID_THREAD;
   635     return JVMTI_ERROR_INVALID_THREAD;
   636   }
   636   }
   637 
   637 
   638   // get most state bits
   638   // get most state bits
   639   state = (jint)java_lang_Thread::get_thread_status(thread_oop);
   639   state = (jint)java_lang_Thread::get_thread_status(thread_oop);
   867 // Threads_lock NOT held
   867 // Threads_lock NOT held
   868 // thread - NOT pre-checked
   868 // thread - NOT pre-checked
   869 jvmtiError
   869 jvmtiError
   870 JvmtiEnv::InterruptThread(jthread thread) {
   870 JvmtiEnv::InterruptThread(jthread thread) {
   871   oop thread_oop = JNIHandles::resolve_external_guard(thread);
   871   oop thread_oop = JNIHandles::resolve_external_guard(thread);
   872   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass()))
   872   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass()))
   873     return JVMTI_ERROR_INVALID_THREAD;
   873     return JVMTI_ERROR_INVALID_THREAD;
   874 
   874 
   875   JavaThread* current_thread  = JavaThread::current();
   875   JavaThread* current_thread  = JavaThread::current();
   876 
   876 
   877   // Todo: this is a duplicate of JVM_Interrupt; share code in future
   877   // Todo: this is a duplicate of JVM_Interrupt; share code in future
   904   if (thread == NULL) {
   904   if (thread == NULL) {
   905     thread_oop = current_thread->threadObj();
   905     thread_oop = current_thread->threadObj();
   906   } else {
   906   } else {
   907     thread_oop = JNIHandles::resolve_external_guard(thread);
   907     thread_oop = JNIHandles::resolve_external_guard(thread);
   908   }
   908   }
   909   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass()))
   909   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass()))
   910     return JVMTI_ERROR_INVALID_THREAD;
   910     return JVMTI_ERROR_INVALID_THREAD;
   911 
   911 
   912   Handle thread_obj(current_thread, thread_oop);
   912   Handle thread_obj(current_thread, thread_oop);
   913   typeArrayHandle    name;
   913   typeArrayHandle    name;
   914   ThreadPriority priority;
   914   ThreadPriority priority;
  1070 // proc - pre-checked for NULL
  1070 // proc - pre-checked for NULL
  1071 // arg - NULL is a valid value, must be checked
  1071 // arg - NULL is a valid value, must be checked
  1072 jvmtiError
  1072 jvmtiError
  1073 JvmtiEnv::RunAgentThread(jthread thread, jvmtiStartFunction proc, const void* arg, jint priority) {
  1073 JvmtiEnv::RunAgentThread(jthread thread, jvmtiStartFunction proc, const void* arg, jint priority) {
  1074   oop thread_oop = JNIHandles::resolve_external_guard(thread);
  1074   oop thread_oop = JNIHandles::resolve_external_guard(thread);
  1075   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::thread_klass())) {
  1075   if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass())) {
  1076     return JVMTI_ERROR_INVALID_THREAD;
  1076     return JVMTI_ERROR_INVALID_THREAD;
  1077   }
  1077   }
  1078   if (priority < JVMTI_THREAD_MIN_PRIORITY || priority > JVMTI_THREAD_MAX_PRIORITY) {
  1078   if (priority < JVMTI_THREAD_MIN_PRIORITY || priority > JVMTI_THREAD_MAX_PRIORITY) {
  1079     return JVMTI_ERROR_INVALID_PRIORITY;
  1079     return JVMTI_ERROR_INVALID_PRIORITY;
  1080   }
  1080   }