1.1 --- a/src/share/vm/services/management.cpp Fri Oct 30 17:24:14 2009 -0700 1.2 +++ b/src/share/vm/services/management.cpp Wed Nov 04 16:49:23 2009 -0500 1.3 @@ -1507,16 +1507,17 @@ 1.4 return (jobjectArray)JNIHandles::make_local(env, flags_ah()); 1.5 JVM_END 1.6 1.7 -// utility function used by jmm_GetVMGlobals 1.8 -void add_global_entry(JNIEnv* env, Handle name, jmmVMGlobal *global, Flag *flag, TRAPS) { 1.9 +// Utility function used by jmm_GetVMGlobals. Returns false if flag type 1.10 +// can't be determined, true otherwise. If false is returned, then *global 1.11 +// will be incomplete and invalid. 1.12 +bool add_global_entry(JNIEnv* env, Handle name, jmmVMGlobal *global, Flag *flag, TRAPS) { 1.13 Handle flag_name; 1.14 if (name() == NULL) { 1.15 - flag_name = java_lang_String::create_from_str(flag->name, CHECK); 1.16 + flag_name = java_lang_String::create_from_str(flag->name, CHECK_false); 1.17 } else { 1.18 flag_name = name; 1.19 } 1.20 global->name = (jstring)JNIHandles::make_local(env, flag_name()); 1.21 - global->type = JMM_VMGLOBAL_TYPE_UNKNOWN; 1.22 1.23 if (flag->is_bool()) { 1.24 global->value.z = flag->get_bool() ? JNI_TRUE : JNI_FALSE; 1.25 @@ -1527,10 +1528,17 @@ 1.26 } else if (flag->is_uintx()) { 1.27 global->value.j = (jlong)flag->get_uintx(); 1.28 global->type = JMM_VMGLOBAL_TYPE_JLONG; 1.29 + } else if (flag->is_uint64_t()) { 1.30 + global->value.j = (jlong)flag->get_uint64_t(); 1.31 + global->type = JMM_VMGLOBAL_TYPE_JLONG; 1.32 } else if (flag->is_ccstr()) { 1.33 - Handle str = java_lang_String::create_from_str(flag->get_ccstr(), CHECK); 1.34 + Handle str = java_lang_String::create_from_str(flag->get_ccstr(), CHECK_false); 1.35 global->value.l = (jobject)JNIHandles::make_local(env, str()); 1.36 global->type = JMM_VMGLOBAL_TYPE_JSTRING; 1.37 + } else { 1.38 + global->type = JMM_VMGLOBAL_TYPE_UNKNOWN; 1.39 + assert(false, "Unsupported VMGlobal Type"); 1.40 + return false; 1.41 } 1.42 1.43 global->writeable = flag->is_writeable(); 1.44 @@ -1557,6 +1565,8 @@ 1.45 default: 1.46 global->origin = JMM_VMGLOBAL_ORIGIN_OTHER; 1.47 } 1.48 + 1.49 + return true; 1.50 } 1.51 1.52 // Fill globals array of count length with jmmVMGlobal entries 1.53 @@ -1599,8 +1609,8 @@ 1.54 Handle sh(THREAD, s); 1.55 char* str = java_lang_String::as_utf8_string(s); 1.56 Flag* flag = Flag::find_flag(str, strlen(str)); 1.57 - if (flag != NULL) { 1.58 - add_global_entry(env, sh, &globals[i], flag, THREAD); 1.59 + if (flag != NULL && 1.60 + add_global_entry(env, sh, &globals[i], flag, THREAD)) { 1.61 num_entries++; 1.62 } else { 1.63 globals[i].name = NULL; 1.64 @@ -1617,8 +1627,8 @@ 1.65 for (int i = 0; i < nFlags && num_entries < count; i++) { 1.66 Flag* flag = &Flag::flags[i]; 1.67 // Exclude the locked (diagnostic, experimental) flags 1.68 - if (flag->is_unlocked() || flag->is_unlocker()) { 1.69 - add_global_entry(env, null_h, &globals[num_entries], flag, THREAD); 1.70 + if ((flag->is_unlocked() || flag->is_unlocker()) && 1.71 + add_global_entry(env, null_h, &globals[num_entries], flag, THREAD)) { 1.72 num_entries++; 1.73 } 1.74 } 1.75 @@ -1650,11 +1660,14 @@ 1.76 bool bvalue = (new_value.z == JNI_TRUE ? true : false); 1.77 succeed = CommandLineFlags::boolAtPut(name, &bvalue, MANAGEMENT); 1.78 } else if (flag->is_intx()) { 1.79 - intx ivalue = new_value.j; 1.80 + intx ivalue = (intx)new_value.j; 1.81 succeed = CommandLineFlags::intxAtPut(name, &ivalue, MANAGEMENT); 1.82 } else if (flag->is_uintx()) { 1.83 - uintx uvalue = new_value.j; 1.84 + uintx uvalue = (uintx)new_value.j; 1.85 succeed = CommandLineFlags::uintxAtPut(name, &uvalue, MANAGEMENT); 1.86 + } else if (flag->is_uint64_t()) { 1.87 + uint64_t uvalue = (uint64_t)new_value.j; 1.88 + succeed = CommandLineFlags::uint64_tAtPut(name, &uvalue, MANAGEMENT); 1.89 } else if (flag->is_ccstr()) { 1.90 oop str = JNIHandles::resolve_external_guard(new_value.l); 1.91 if (str == NULL) {