提交 dea755b9 编写于 作者: D dholmes

7179383: MaxDirectMemorySize argument parsing is broken for values >2G

Summary: change hotspot flag to be unsigned
Reviewed-by: dholmes, sla, fparain, brutisso
Contributed-by: NChris Dennis <cdennis@terracottatech.com>
上级 c3d02bab
...@@ -345,10 +345,14 @@ JVM_ENTRY(jobject, JVM_InitProperties(JNIEnv *env, jobject properties)) ...@@ -345,10 +345,14 @@ JVM_ENTRY(jobject, JVM_InitProperties(JNIEnv *env, jobject properties))
// Do this after setting user properties to prevent people // Do this after setting user properties to prevent people
// from setting the value with a -D option, as requested. // from setting the value with a -D option, as requested.
{ {
if (FLAG_IS_DEFAULT(MaxDirectMemorySize)) {
PUTPROP(props, "sun.nio.MaxDirectMemorySize", "-1");
} else {
char as_chars[256]; char as_chars[256];
jio_snprintf(as_chars, sizeof(as_chars), INTX_FORMAT, MaxDirectMemorySize); jio_snprintf(as_chars, sizeof(as_chars), UINTX_FORMAT, MaxDirectMemorySize);
PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars); PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars);
} }
}
// JVM monitoring and management support // JVM monitoring and management support
// Add the sun.management.compiler property for the compiler's name // Add the sun.management.compiler property for the compiler's name
......
...@@ -2709,6 +2709,17 @@ SOLARIS_ONLY( ...@@ -2709,6 +2709,17 @@ SOLARIS_ONLY(
return JNI_EINVAL; return JNI_EINVAL;
} }
FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads); FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads);
} else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) {
julong max_direct_memory_size = 0;
ArgsRange errcode = parse_memory_size(tail, &max_direct_memory_size, 0);
if (errcode != arg_in_range) {
jio_fprintf(defaultStream::error_stream(),
"Invalid maximum direct memory size: %s\n",
option->optionString);
describe_range_error(errcode);
return JNI_EINVAL;
}
FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size);
} else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx
// Skip -XX:Flags= since that case has already been handled // Skip -XX:Flags= since that case has already been handled
if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) {
......
...@@ -3705,7 +3705,7 @@ class CommandLineFlags { ...@@ -3705,7 +3705,7 @@ class CommandLineFlags {
\ \
/* Properties for Java libraries */ \ /* Properties for Java libraries */ \
\ \
product(intx, MaxDirectMemorySize, -1, \ product(uintx, MaxDirectMemorySize, 0, \
"Maximum total size of NIO direct-buffer allocations") \ "Maximum total size of NIO direct-buffer allocations") \
\ \
/* temporary developer defined flags */ \ /* temporary developer defined flags */ \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册