[jboss-svn-commits] JBoss Common SVN: r3229 - jboss-logmanager/trunk/src/main/java/org/jboss/logmanager.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jun 5 11:01:29 EDT 2009
Author: david.lloyd at jboss.com
Date: 2009-06-05 11:01:29 -0400 (Fri, 05 Jun 2009)
New Revision: 3229
Modified:
jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/LoggerNode.java
Log:
The root logger must be strongly referenced or else it will disappear unexpectedly
Modified: jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/LoggerNode.java
===================================================================
--- jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/LoggerNode.java 2009-06-05 14:35:09 UTC (rev 3228)
+++ jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/LoggerNode.java 2009-06-05 15:01:29 UTC (rev 3229)
@@ -49,7 +49,7 @@
/**
* A weak reference to the logger instance. Protected by {@code this}.
*/
- private WeakReference<Logger> loggerRef = null;
+ private LoggerRef loggerRef = null;
/**
* The map of names to child nodes. The child node references are weak.
@@ -151,7 +151,7 @@
Logger instance = loggerRef == null ? null : loggerRef.get();
if (instance == null) {
instance = new Logger(this, fullName);
- loggerRef = new WeakReference<Logger>(instance);
+ loggerRef = fullName.length() == 0 ? new StrongLoggerRef(instance) : new WeakLoggerRef(instance);
instance.setLevel(null);
}
return instance;
@@ -217,7 +217,7 @@
for (LoggerNode node : children.values()) {
if (node != null) {
synchronized (node) {
- final WeakReference<Logger> loggerRef = node.loggerRef;
+ final LoggerRef loggerRef = node.loggerRef;
if (loggerRef != null) {
final Logger instance = loggerRef.get();
if (instance != null) {
@@ -228,4 +228,26 @@
}
}
}
+
+ private interface LoggerRef {
+ Logger get();
+ }
+
+ private static final class WeakLoggerRef extends WeakReference<Logger> implements LoggerRef {
+ private WeakLoggerRef(Logger referent) {
+ super(referent);
+ }
+ }
+
+ private static final class StrongLoggerRef implements LoggerRef {
+ private final Logger logger;
+
+ private StrongLoggerRef(final Logger logger) {
+ this.logger = logger;
+ }
+
+ public Logger get() {
+ return logger;
+ }
+ }
}
More information about the jboss-svn-commits
mailing list