--- a/jdk/src/share/classes/java/util/logging/LogManager.java Wed Apr 17 15:04:59 2013 -0700
+++ b/jdk/src/share/classes/java/util/logging/LogManager.java Tue Apr 23 11:13:38 2013 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2013, 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,10 +35,8 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.beans.PropertyChangeListener;
-import java.net.URL;
import sun.misc.JavaAWTAccess;
import sun.misc.SharedSecrets;
-import sun.security.action.GetPropertyAction;
/**
* There is a single global LogManager object that is used to
@@ -148,7 +146,6 @@
// The global LogManager object
private static LogManager manager;
- private final static Handler[] emptyHandlers = { };
private Properties props = new Properties();
private final static Level defaultLevel = Level.INFO;
@@ -555,14 +552,10 @@
if (name == null) {
throw new NullPointerException();
}
-
- // cleanup some Loggers that have been GC'ed
- manager.drainLoggerRefQueueBounded();
-
LoggerWeakRef ref = namedLoggers.get(name);
if (ref != null) {
if (ref.get() == null) {
- // It's possible that the Logger was GC'ed after the
+ // It's possible that the Logger was GC'ed after a
// drainLoggerRefQueueBounded() call above so allow
// a new one to be registered.
removeLogger(name);
@@ -614,6 +607,8 @@
return true;
}
+ // note: all calls to removeLogger are synchronized on LogManager's
+ // intrinsic lock
void removeLogger(String name) {
namedLoggers.remove(name);
}
@@ -896,6 +891,7 @@
if (name == null) {
throw new NullPointerException();
}
+ drainLoggerRefQueueBounded();
LoggerContext cx = getUserContext();
if (cx.addLocalLogger(logger)) {
// Do we have a per logger handler too?