[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