Merge
This commit is contained in:
commit
9d0fadc788
@ -3938,16 +3938,8 @@ jint Arguments::insert_vm_options_file(const JavaVMInitArgs* args,
|
|||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now set global settings from the vm_option file, giving an error if
|
|
||||||
// it has VMOptionsFile in it
|
|
||||||
code = match_special_option_and_act(vm_options_file_args->get(), flags_file,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
if (code != JNI_OK) {
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vm_options_file_args->get()->nOptions < 1) {
|
if (vm_options_file_args->get()->nOptions < 1) {
|
||||||
return 0;
|
return JNI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return args_out->insert(args, vm_options_file_args->get(),
|
return args_out->insert(args, vm_options_file_args->get(),
|
||||||
@ -3982,17 +3974,29 @@ jint Arguments::match_special_option_and_act(const JavaVMInitArgs* args,
|
|||||||
// The caller accepts -XX:VMOptionsFile
|
// The caller accepts -XX:VMOptionsFile
|
||||||
if (*vm_options_file != NULL) {
|
if (*vm_options_file != NULL) {
|
||||||
jio_fprintf(defaultStream::error_stream(),
|
jio_fprintf(defaultStream::error_stream(),
|
||||||
"Only one VM Options file is supported "
|
"The VM Options file can only be specified once and "
|
||||||
"on the command line\n");
|
"only on the command line.\n");
|
||||||
return JNI_EINVAL;
|
return JNI_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*vm_options_file = (char *) tail;
|
*vm_options_file = (char *) tail;
|
||||||
vm_options_file_pos = index; // save position of -XX:VMOptionsFile
|
vm_options_file_pos = index; // save position of -XX:VMOptionsFile
|
||||||
if (*vm_options_file == NULL) {
|
// If there's a VMOptionsFile, parse that (also can set flags_file)
|
||||||
jio_fprintf(defaultStream::error_stream(),
|
jint code = insert_vm_options_file(args, flags_file, vm_options_file,
|
||||||
"Cannot copy vm_options_file name.\n");
|
vm_options_file_pos,
|
||||||
return JNI_ENOMEM;
|
vm_options_file_args, args_out);
|
||||||
|
if (code != JNI_OK) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
if (args_out->is_set()) {
|
||||||
|
// The VMOptions file inserted some options so switch 'args'
|
||||||
|
// to the new set of options, and continue processing which
|
||||||
|
// preserves "last option wins" semantics.
|
||||||
|
args = args_out->get();
|
||||||
|
// The first option from the VMOptionsFile replaces the
|
||||||
|
// current option. So we back track to process the
|
||||||
|
// replacement option.
|
||||||
|
index--;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jio_fprintf(defaultStream::error_stream(),
|
jio_fprintf(defaultStream::error_stream(),
|
||||||
@ -4052,12 +4056,6 @@ jint Arguments::match_special_option_and_act(const JavaVMInitArgs* args,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there's a VMOptionsFile, parse that (also can set flags_file)
|
|
||||||
if ((vm_options_file != NULL) && (*vm_options_file != NULL)) {
|
|
||||||
return insert_vm_options_file(args, flags_file, vm_options_file,
|
|
||||||
vm_options_file_pos, vm_options_file_args, args_out);
|
|
||||||
}
|
|
||||||
return JNI_OK;
|
return JNI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8061999
|
* @bug 8061999 8135195 8136552
|
||||||
* @summary Test "-XX:VMOptionsFile" VM option
|
* @summary Test "-XX:VMOptionsFile" VM option
|
||||||
* @library /testlibrary
|
* @library /testlibrary
|
||||||
* @modules jdk.management
|
* @modules jdk.management
|
||||||
@ -478,6 +478,7 @@ public class TestVMOptionsFile {
|
|||||||
runJavaCheckExitValue(pb, JVM_SUCCESS);
|
runJavaCheckExitValue(pb, JVM_SUCCESS);
|
||||||
|
|
||||||
outputShouldContain("interpreted mode");
|
outputShouldContain("interpreted mode");
|
||||||
|
outputShouldNotContain("VM option '+PrintVMOptions'");
|
||||||
checkProperty("shared.property", "command_line_after");
|
checkProperty("shared.property", "command_line_after");
|
||||||
checkVMOption("MinHeapFreeRatio", "9");
|
checkVMOption("MinHeapFreeRatio", "9");
|
||||||
|
|
||||||
@ -547,13 +548,13 @@ public class TestVMOptionsFile {
|
|||||||
addVMOptionsFile(VM_OPTION_FILE_WITH_SAME_VM_OPTION_FILE);
|
addVMOptionsFile(VM_OPTION_FILE_WITH_SAME_VM_OPTION_FILE);
|
||||||
|
|
||||||
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
||||||
outputShouldContain("VM options file is only supported on the command line");
|
outputShouldContain("The VM Options file can only be specified once and only on the command line.");
|
||||||
|
|
||||||
/* Pass VM option file with VM option file option in it */
|
/* Pass VM option file with VM option file option in it */
|
||||||
addVMOptionsFile(VM_OPTION_FILE_WITH_VM_OPTION_FILE);
|
addVMOptionsFile(VM_OPTION_FILE_WITH_VM_OPTION_FILE);
|
||||||
|
|
||||||
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
||||||
outputShouldContain("VM options file is only supported on the command line");
|
outputShouldContain("The VM Options file can only be specified once and only on the command line.");
|
||||||
|
|
||||||
/* Pass VM option file which is not accessible (without read permissions) */
|
/* Pass VM option file which is not accessible (without read permissions) */
|
||||||
addVMOptionsFile(getAbsolutePathFromSource(VM_OPTION_FILE_WITHOUT_READ_PERMISSIONS));
|
addVMOptionsFile(getAbsolutePathFromSource(VM_OPTION_FILE_WITHOUT_READ_PERMISSIONS));
|
||||||
@ -566,7 +567,7 @@ public class TestVMOptionsFile {
|
|||||||
addVMOptionsFile(VM_OPTION_FILE_2);
|
addVMOptionsFile(VM_OPTION_FILE_2);
|
||||||
|
|
||||||
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
||||||
outputShouldContain("Only one VM Options file is supported on the command line");
|
outputShouldContain("The VM Options file can only be specified once and only on the command line.");
|
||||||
|
|
||||||
/* Pass empty option file i.e. pass "-XX:VMOptionsFile=" */
|
/* Pass empty option file i.e. pass "-XX:VMOptionsFile=" */
|
||||||
addVMOptionsFile("");
|
addVMOptionsFile("");
|
||||||
@ -585,6 +586,22 @@ public class TestVMOptionsFile {
|
|||||||
|
|
||||||
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
runJavaCheckExitValue(JVM_FAIL_WITH_EXIT_CODE_1);
|
||||||
outputShouldContain("Unmatched quote in");
|
outputShouldContain("Unmatched quote in");
|
||||||
|
|
||||||
|
/* Pass VM Option file in _JAVA_OPTIONS environment variable */
|
||||||
|
pb = createProcessBuilder();
|
||||||
|
|
||||||
|
updateEnvironment(pb, JAVA_OPTIONS, "-XX:VMOptionsFile=" + getAbsolutePathFromSource(VM_OPTION_FILE_1));
|
||||||
|
|
||||||
|
runJavaCheckExitValue(pb, JVM_FAIL_WITH_EXIT_CODE_1);
|
||||||
|
outputShouldContain("VM options file is only supported on the command line");
|
||||||
|
|
||||||
|
/* Pass VM Option file in JAVA_TOOL_OPTIONS environment variable */
|
||||||
|
pb = createProcessBuilder();
|
||||||
|
|
||||||
|
updateEnvironment(pb, JAVA_TOOL_OPTIONS, "-XX:VMOptionsFile=" + getAbsolutePathFromSource(VM_OPTION_FILE_1));
|
||||||
|
|
||||||
|
runJavaCheckExitValue(pb, JVM_FAIL_WITH_EXIT_CODE_1);
|
||||||
|
outputShouldContain("VM options file is only supported on the command line");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user