Merge
authoriignatyev
Mon, 23 Dec 2013 18:39:47 +0000
changeset 22195 c39aa322d33a
parent 22193 530963406a44 (current diff)
parent 22194 e4bef4b8cdb4 (diff)
child 22196 b48393754f75
Merge
--- a/hotspot/src/share/vm/runtime/globals.cpp	Mon Dec 23 10:13:42 2013 -0500
+++ b/hotspot/src/share/vm/runtime/globals.cpp	Mon Dec 23 18:39:47 2013 +0000
@@ -702,8 +702,6 @@
   return true;
 }
 
-// Contract:  Flag will make private copy of the incoming value.
-// Outgoing value is always malloc-ed, and caller MUST call free.
 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin) {
   Flag* result = Flag::find_flag(name, len);
   if (result == NULL) return false;
@@ -726,7 +724,6 @@
   return true;
 }
 
-// Contract:  Flag will make private copy of the incoming value.
 void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin) {
   Flag* faddr = address_of_flag(flag);
   guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type");
--- a/hotspot/src/share/vm/runtime/globals.hpp	Mon Dec 23 10:13:42 2013 -0500
+++ b/hotspot/src/share/vm/runtime/globals.hpp	Mon Dec 23 18:39:47 2013 +0000
@@ -376,6 +376,8 @@
 
   static bool ccstrAt(char* name, size_t len, ccstr* value);
   static bool ccstrAt(char* name, ccstr* value)    { return ccstrAt(name, strlen(name), value); }
+  // Contract:  Flag will make private copy of the incoming value.
+  // Outgoing value is always malloc-ed, and caller MUST call free.
   static bool ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin);
   static bool ccstrAtPut(char* name, ccstr* value, Flag::Flags origin) { return ccstrAtPut(name, strlen(name), value, origin); }
 
--- a/hotspot/src/share/vm/runtime/globals_extension.hpp	Mon Dec 23 10:13:42 2013 -0500
+++ b/hotspot/src/share/vm/runtime/globals_extension.hpp	Mon Dec 23 18:39:47 2013 +0000
@@ -201,6 +201,7 @@
   static void uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin);
   static void uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin);
   static void doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin);
+  // Contract:  Flag will make private copy of the incoming value
   static void ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin);
 
   static bool is_default(CommandLineFlag flag);
--- a/hotspot/src/share/vm/services/management.cpp	Mon Dec 23 10:13:42 2013 -0500
+++ b/hotspot/src/share/vm/services/management.cpp	Mon Dec 23 18:39:47 2013 +0000
@@ -1821,7 +1821,7 @@
               "This flag is not writeable.");
   }
 
-  bool succeed;
+  bool succeed = false;
   if (flag->is_bool()) {
     bool bvalue = (new_value.z == JNI_TRUE ? true : false);
     succeed = CommandLineFlags::boolAtPut(name, &bvalue, Flag::MANAGEMENT);
@@ -1841,6 +1841,9 @@
     }
     ccstr svalue = java_lang_String::as_utf8_string(str);
     succeed = CommandLineFlags::ccstrAtPut(name, &svalue, Flag::MANAGEMENT);
+    if (succeed) {
+      FREE_C_HEAP_ARRAY(char, svalue, mtInternal);
+    }
   }
   assert(succeed, "Setting flag should succeed");
 JVM_END