< prev index next >

src/hotspot/share/prims/jvmtiEnv.cpp

Print this page




2822   //
2823 
2824 // hash_code_ptr - pre-checked for NULL
2825 jvmtiError
2826 JvmtiEnv::GetObjectHashCode(jobject object, jint* hash_code_ptr) {
2827   oop mirror = JNIHandles::resolve_external_guard(object);
2828   NULL_CHECK(mirror, JVMTI_ERROR_INVALID_OBJECT);
2829   NULL_CHECK(hash_code_ptr, JVMTI_ERROR_NULL_POINTER);
2830 
2831   {
2832     jint result = (jint) mirror->identity_hash();
2833     *hash_code_ptr = result;
2834   }
2835   return JVMTI_ERROR_NONE;
2836 } /* end GetObjectHashCode */
2837 
2838 
2839 // info_ptr - pre-checked for NULL
2840 jvmtiError
2841 JvmtiEnv::GetObjectMonitorUsage(jobject object, jvmtiMonitorUsage* info_ptr) {
2842   JavaThread* calling_thread = JavaThread::current();
2843   jvmtiError err = get_object_monitor_usage(calling_thread, object, info_ptr);
2844   if (err == JVMTI_ERROR_THREAD_NOT_SUSPENDED) {
2845     // Some of the critical threads were not suspended. go to a safepoint and try again
2846     VM_GetObjectMonitorUsage op(this, calling_thread, object, info_ptr);
2847     VMThread::execute(&op);
2848     err = op.result();
2849   }
2850   return err;
2851 } /* end GetObjectMonitorUsage */
2852 
2853 
2854   //
2855   // Field functions
2856   //
2857 
2858 // name_ptr - NULL is a valid value, must be checked
2859 // signature_ptr - NULL is a valid value, must be checked
2860 // generic_ptr - NULL is a valid value, must be checked
2861 jvmtiError
2862 JvmtiEnv::GetFieldName(fieldDescriptor* fdesc_ptr, char** name_ptr, char** signature_ptr, char** generic_ptr) {
2863   JavaThread* current_thread  = JavaThread::current();
2864   ResourceMark rm(current_thread);
2865   if (name_ptr == NULL) {
2866     // just don't return the name
2867   } else {
2868     const char* fieldName = fdesc_ptr->name()->as_C_string();
2869     *name_ptr =  (char*) jvmtiMalloc(strlen(fieldName) + 1);
2870     if (*name_ptr == NULL)




2822   //
2823 
2824 // hash_code_ptr - pre-checked for NULL
2825 jvmtiError
2826 JvmtiEnv::GetObjectHashCode(jobject object, jint* hash_code_ptr) {
2827   oop mirror = JNIHandles::resolve_external_guard(object);
2828   NULL_CHECK(mirror, JVMTI_ERROR_INVALID_OBJECT);
2829   NULL_CHECK(hash_code_ptr, JVMTI_ERROR_NULL_POINTER);
2830 
2831   {
2832     jint result = (jint) mirror->identity_hash();
2833     *hash_code_ptr = result;
2834   }
2835   return JVMTI_ERROR_NONE;
2836 } /* end GetObjectHashCode */
2837 
2838 
2839 // info_ptr - pre-checked for NULL
2840 jvmtiError
2841 JvmtiEnv::GetObjectMonitorUsage(jobject object, jvmtiMonitorUsage* info_ptr) {
2842   // This needs to be performed at a safepoint to gather stable data
2843   // because monitor owner / waiters might not be suspended.
2844   VM_GetObjectMonitorUsage op(this, JavaThread::current(), object, info_ptr);


2845   VMThread::execute(&op);
2846   return op.result();


2847 } /* end GetObjectMonitorUsage */
2848 
2849 
2850   //
2851   // Field functions
2852   //
2853 
2854 // name_ptr - NULL is a valid value, must be checked
2855 // signature_ptr - NULL is a valid value, must be checked
2856 // generic_ptr - NULL is a valid value, must be checked
2857 jvmtiError
2858 JvmtiEnv::GetFieldName(fieldDescriptor* fdesc_ptr, char** name_ptr, char** signature_ptr, char** generic_ptr) {
2859   JavaThread* current_thread  = JavaThread::current();
2860   ResourceMark rm(current_thread);
2861   if (name_ptr == NULL) {
2862     // just don't return the name
2863   } else {
2864     const char* fieldName = fdesc_ptr->name()->as_C_string();
2865     *name_ptr =  (char*) jvmtiMalloc(strlen(fieldName) + 1);
2866     if (*name_ptr == NULL)


< prev index next >