# HG changeset patch # User amurillo # Date 1419037305 28800 # Node ID 709453bb08e575f79a97db1a3196a48ab881771e # Parent 8da4af46db02f78cf84c0ddac4bd70b466bf53c2# Parent 0e8e53dea93ae527b73dac927861c7dc4309bb6b Merge diff -r 8da4af46db02 -r 709453bb08e5 jdk/src/java.base/share/native/include/jvm.h --- a/jdk/src/java.base/share/native/include/jvm.h Thu Dec 18 18:51:28 2014 -0500 +++ b/jdk/src/java.base/share/native/include/jvm.h Fri Dec 19 17:01:45 2014 -0800 @@ -334,15 +334,6 @@ jobject loader, jclass caller); /* - * Find a class from a given class loader. Throw ClassNotFoundException - * or NoClassDefFoundError depending on the value of the last - * argument. - */ -JNIEXPORT jclass JNICALL -JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, jboolean init, - jobject loader, jboolean throwError); - -/* * Find a class from a given class. */ JNIEXPORT jclass JNICALL diff -r 8da4af46db02 -r 709453bb08e5 jdk/test/java/lang/ClassLoader/EndorsedDirs.java --- a/jdk/test/java/lang/ClassLoader/EndorsedDirs.java Thu Dec 18 18:51:28 2014 -0500 +++ b/jdk/test/java/lang/ClassLoader/EndorsedDirs.java Fri Dec 19 17:01:45 2014 -0800 @@ -23,25 +23,48 @@ /* * @test - * @bug 8060206 + * @bug 8060206 8067366 * @summary Endorsed standards and override mechanism is removed */ import java.io.*; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public class EndorsedDirs { - public static void main(String arg[]) throws Exception { + private static String[] VALUES = new String[] { + null, + "", + "\"\"" + }; + public static void main(String... args) throws Exception { String value = System.getProperty("java.endorsed.dirs"); + System.out.format("java.endorsed.dirs = '%s'%n", value); + if (args.length > 0) { + int index = Integer.valueOf(args[0]); + String expectedValue = VALUES[index]; + if (!(expectedValue == value || + (value != null && value.isEmpty()) || + (expectedValue != null & expectedValue.equals(value)))) { + throw new RuntimeException("java.endorsed.dirs (" + + value + ") != " + expectedValue); + } + // launched by subprocess. + return; + } + if (value != null) { throw new RuntimeException("java.endorsed.dirs not removed: " + value); } - fatalError("-Djava.endorsed.dirs=foo"); + fatalError(0, "-Djava.endorsed.dirs=foo"); + start(0); + start(1, "-Djava.endorsed.dirs="); + start(2, "-Djava.endorsed.dirs=\"\""); } - static void fatalError(String... args) throws Exception { + static ProcessBuilder newProcessBuilder(int testParam, String... args) throws Exception { List commands = new ArrayList<>(); String java = System.getProperty("java.home") + "/bin/java"; commands.add(java); @@ -52,9 +75,22 @@ commands.add("-cp"); commands.add(cpath); commands.add("EndorsedDirs"); + commands.add(String.valueOf(testParam)); - ProcessBuilder processBuilder = new ProcessBuilder(commands); - final Process process = processBuilder.start(); + System.out.println("Testing " + commands.stream().collect(Collectors.joining(" "))); + return new ProcessBuilder(commands); + } + + static void start(int testParam, String... args) throws Exception { + start(newProcessBuilder(testParam, args), false); + } + + static void fatalError(int testParam, String... args) throws Exception { + start(newProcessBuilder(testParam, args), true); + } + + static void start(ProcessBuilder pb, boolean fatalError) throws Exception { + final Process process = pb.start(); BufferedReader errorStream = new BufferedReader( new InputStreamReader(process.getErrorStream())); BufferedReader outStream = new BufferedReader( @@ -72,11 +108,15 @@ System.err.println(errorLine); process.waitFor(1000, TimeUnit.MILLISECONDS); int exitStatus = process.exitValue(); - if (exitStatus == 0) { - throw new RuntimeException("Expect fatal error"); - } - if (!errorLine.contains("Could not create the Java Virtual Machine")) { - throw new RuntimeException(errorLine); + if (fatalError) { + if (exitStatus == 0) { + throw new RuntimeException("Expected fatal error"); + } + if (!errorLine.contains("Could not create the Java Virtual Machine")) { + throw new RuntimeException(errorLine); + } + } else if (exitStatus != 0) { + throw new RuntimeException("Failed: " + errorLine); } } } diff -r 8da4af46db02 -r 709453bb08e5 jdk/test/java/lang/ClassLoader/ExtDirs.java --- a/jdk/test/java/lang/ClassLoader/ExtDirs.java Thu Dec 18 18:51:28 2014 -0500 +++ b/jdk/test/java/lang/ClassLoader/ExtDirs.java Fri Dec 19 17:01:45 2014 -0800 @@ -23,25 +23,49 @@ /* * @test - * @bug 8060206 + * @bug 8060206 8067366 * @summary Extension mechanism is removed */ import java.io.*; +import java.lang.Integer; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public class ExtDirs { - public static void main(String arg[]) throws Exception { + private static String[] VALUES = new String[] { + null, + "", + "\"\"" + }; + public static void main(String... args) throws Exception { String value = System.getProperty("java.ext.dirs"); + System.out.format("java.ext.dirs = '%s'%n", value); + if (args.length > 0) { + int index = Integer.valueOf(args[0]); + String expectedValue = VALUES[index]; + if (!(expectedValue == value || + (value != null && value.isEmpty()) || + (expectedValue != null & expectedValue.equals(value)))) { + throw new RuntimeException("java.ext.dirs (" + + value + ") != " + expectedValue); + } + // launched by subprocess. + return; + } + if (value != null) { throw new RuntimeException("java.ext.dirs not removed: " + value); } - fatalError("-Djava.ext.dirs=foo"); + fatalError(0, "-Djava.ext.dirs=foo"); + start(0); + start(1, "-Djava.ext.dirs="); + start(2, "-Djava.ext.dirs=\"\""); } - static void fatalError(String... args) throws Exception { + static ProcessBuilder newProcessBuilder(int testParam, String... args) throws Exception { List commands = new ArrayList<>(); String java = System.getProperty("java.home") + "/bin/java"; commands.add(java); @@ -52,9 +76,22 @@ commands.add("-cp"); commands.add(cpath); commands.add("ExtDirs"); + commands.add(String.valueOf(testParam)); - ProcessBuilder processBuilder = new ProcessBuilder(commands); - final Process process = processBuilder.start(); + System.out.println("Testing " + commands.stream().collect(Collectors.joining(" "))); + return new ProcessBuilder(commands); + } + + static void start(int testParam, String... args) throws Exception { + start(newProcessBuilder(testParam, args), false); + } + + static void fatalError(int testParam, String... args) throws Exception { + start(newProcessBuilder(testParam, args), true); + } + + static void start(ProcessBuilder pb, boolean fatalError) throws Exception { + final Process process = pb.start(); BufferedReader errorStream = new BufferedReader( new InputStreamReader(process.getErrorStream())); BufferedReader outStream = new BufferedReader( @@ -72,11 +109,15 @@ System.err.println(errorLine); process.waitFor(1000, TimeUnit.MILLISECONDS); int exitStatus = process.exitValue(); - if (exitStatus == 0) { - throw new RuntimeException("Expect fatal error"); - } - if (!errorLine.contains("Could not create the Java Virtual Machine")) { - throw new RuntimeException(errorLine); + if (fatalError) { + if (exitStatus == 0) { + throw new RuntimeException("Expected fatal error"); + } + if (!errorLine.contains("Could not create the Java Virtual Machine")) { + throw new RuntimeException(errorLine); + } + } else if (exitStatus != 0) { + throw new RuntimeException("Failed: " + errorLine); } } } diff -r 8da4af46db02 -r 709453bb08e5 jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest.java --- a/jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest.java Thu Dec 18 18:51:28 2014 -0500 +++ b/jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest.java Fri Dec 19 17:01:45 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,11 +35,13 @@ * @run main/timeout=600 LowMemoryTest */ +import com.sun.management.DiagnosticCommandMBean; import java.lang.management.*; import java.util.*; import java.util.concurrent.Phaser; import javax.management.*; import javax.management.openmbean.CompositeData; +import sun.management.ManagementFactoryHelper; public class LowMemoryTest { private static final MemoryMXBean mm = ManagementFactory.getMemoryMXBean(); @@ -94,9 +96,15 @@ } static class TestListener implements NotificationListener { + private boolean isRelaxed = false; private int triggers = 0; private final long[] count = new long[NUM_TRIGGERS * 2]; private final long[] usedMemory = new long[NUM_TRIGGERS * 2]; + + public TestListener() { + isRelaxed = ManagementFactory.getRuntimeMXBean().getInputArguments().contains("-XX:+UseConcMarkSweepGC"); + } + @Override public void handleNotification(Notification notif, Object handback) { MemoryNotificationInfo minfo = MemoryNotificationInfo. @@ -106,7 +114,8 @@ triggers++; } public void checkResult() throws Exception { - if (triggers != NUM_TRIGGERS) { + if ((!isRelaxed && triggers != NUM_TRIGGERS) || + (isRelaxed && triggers < NUM_TRIGGERS)) { throw new RuntimeException("Unexpected number of triggers = " + triggers + " but expected to be " + NUM_TRIGGERS); }