Author: psmith
Date: Thu Nov 10 22:02:00 2005
New Revision: 332461

URL: http://svn.apache.org/viewcvs?rev=332461&view=rev
Log:
Turns out on my Mac at least, the initialization of the WorkQueue
variable causes a race condition where the thread tries to read
variables that have not been initialized yet.

Modified:
    
logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java

Modified: 
logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
URL: 
http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java?rev=332461&r1=332460&r2=332461&view=diff
==============================================================================
--- 
logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
 (original)
+++ 
logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
 Thu Nov 10 22:02:00 2005
@@ -43,7 +43,6 @@
  */
 public class ChainsawAppenderHandler extends AppenderSkeleton {
   private static final String DEFAULT_IDENTIFIER = "Unknown";
-  private WorkQueue worker = new WorkQueue();
   private final Object mutex = new Object();
   private int sleepInterval = 1000;
   private EventListenerList listenerList = new EventListenerList();
@@ -55,6 +54,15 @@
       this);
   private Map customExpressionRules = new HashMap();
 
+  /**
+   * NOTE: This variable needs to be physically located LAST, because
+   * of the initialization sequence, the WorkQueue constructor starts a thread 
+   * which ends up needing some reference to fields created in 
ChainsawAppenderHandler (outer instance)
+   * which may not have been created yet.  Becomes a race condition, and 
therefore
+   * this field initialization should be kept last.
+   */
+  private WorkQueue worker = new WorkQueue();
+  
   public ChainsawAppenderHandler(final ChainsawAppender appender) {
     super(true);
     appender.setAppender(this);



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to