--- old/test/java/lang/management/PlatformLoggingMXBean/LoggingMXBeanTest.java 2013-06-13 15:17:55.000000000 +0200 +++ new/test/java/lang/management/PlatformLoggingMXBean/LoggingMXBeanTest.java 2013-06-13 15:17:55.000000000 +0200 @@ -39,9 +39,9 @@ public class LoggingMXBeanTest { - static String LOGGER_NAME_1 = "com.sun.management.Logger"; - static String LOGGER_NAME_2 = "com.sun.management.Logger.Logger2"; - static String UNKNOWN_LOGGER_NAME = "com.sun.management.Unknown"; + static final String LOGGER_NAME_1 = "com.sun.management.Logger"; + static final String LOGGER_NAME_2 = "com.sun.management.Logger.Logger2"; + static final String UNKNOWN_LOGGER_NAME = "com.sun.management.Unknown"; // These instance variables prevent premature logger garbage collection // See getLogger() weak reference warnings. @@ -224,12 +224,33 @@ // verify logger's level and parent for (String logger : loggers1) { - if (!mxbean1.getLoggerLevel(logger) - .equals(mxbean2.getLoggerLevel(logger))) - throw new RuntimeException( - "LoggerLevel: unmatched level for " + logger - + ", " + mxbean1.getLoggerLevel(logger) - + ", " + mxbean2.getLoggerLevel(logger)); + // it is conceivable that mxbean1.getLoggerLevel(logger) is null + // if logger has been gc'ed. + String level1 = mxbean1.getLoggerLevel(logger); + String level2 = mxbean2.getLoggerLevel(logger); + if (!java.util.Objects.equals(level1, level2)) { + boolean mustfail; + switch(logger) { + case LOGGER_NAME_1: + case LOGGER_NAME_2: + mustfail = true; // we have a ref on those loggers. + // they should not have been gc'ed. + break; + default: + mustfail = level1 != null && level2 != null; + } + if (mustfail) { + throw new RuntimeException( + "LoggerLevel: unmatched level for " + logger + + ", " + level1 + ", " + level2); + } else { + System.err.println("WARNING: level was null for " + logger + + "; Unmatched level for " + logger + + ", " + level1 + ", " + level2 ); + continue; // no use to check further - the logger was + // probably gc'ed + } + } if (!mxbean1.getParentLoggerName(logger) .equals(mxbean2.getParentLoggerName(logger)))