src/share/vm/services/management.cpp

changeset 1502
ba7ea42fc66e
parent 1499
473cce303f13
child 1577
4ce7240d622c
     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) {

mercurial