8066448: SmallCodeCacheStartup.java exits with exit code 1

Check for VirtualMachineError in case VM initialization fails.

Reviewed-by: kvn
This commit is contained in:
Tobias Hartmann 2014-12-04 09:52:15 +01:00
parent 65fe921d3d
commit f9806ff009
2 changed files with 18 additions and 11 deletions

View file

@ -936,7 +936,7 @@ address Method::make_adapters(methodHandle mh, TRAPS) {
// so making them eagerly shouldn't be too expensive. // so making them eagerly shouldn't be too expensive.
AdapterHandlerEntry* adapter = AdapterHandlerLibrary::get_adapter(mh); AdapterHandlerEntry* adapter = AdapterHandlerLibrary::get_adapter(mh);
if (adapter == NULL ) { if (adapter == NULL ) {
THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "out of space in CodeCache for adapters"); THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "Out of space in CodeCache for adapters");
} }
mh->set_adapter_entry(adapter); mh->set_adapter_entry(adapter);

View file

@ -24,22 +24,29 @@
/* /*
* @test * @test
* @bug 8023014 * @bug 8023014
* @summary Test ensures that there is no crash if there is not enough ReservedCodeacacheSize * @summary Test ensures that there is no crash if there is not enough ReservedCodeCacheSize
* to initialize all compiler threads. The option -Xcomp gives the VM more time to * to initialize all compiler threads. The option -Xcomp gives the VM more time to
* to trigger the old bug. * trigger the old bug.
* @library /testlibrary * @library /testlibrary
*/ */
import com.oracle.java.testlibrary.*; import com.oracle.java.testlibrary.*;
import static com.oracle.java.testlibrary.Asserts.assertTrue;
public class SmallCodeCacheStartup { public class SmallCodeCacheStartup {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:ReservedCodeCacheSize=3m", ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:ReservedCodeCacheSize=3m",
"-XX:CICompilerCount=64", "-XX:CICompilerCount=64",
"-Xcomp", "-Xcomp",
"-version"); "-version");
OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());
analyzer.shouldHaveExitValue(0); try {
analyzer.shouldHaveExitValue(0);
} catch (RuntimeException e) {
// Error occurred during initialization, did we run out of adapter space?
assertTrue(analyzer.getOutput().contains("VirtualMachineError: Out of space in CodeCache"),
"Expected VirtualMachineError");
}
System.out.println("TEST PASSED"); System.out.println("TEST PASSED");
} }
} }