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]