ceki 2002/10/16 06:42:37
Modified: src/java/org/apache/log4j AppenderSkeleton.java
Log:
Added appedner reentrancy support.
Revision Changes Path
1.21 +26 -11 jakarta-log4j/src/java/org/apache/log4j/AppenderSkeleton.java
Index: AppenderSkeleton.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/AppenderSkeleton.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- AppenderSkeleton.java 9 Oct 2002 22:50:01 -0000 1.20
+++ AppenderSkeleton.java 16 Oct 2002 13:42:37 -0000 1.21
@@ -54,6 +54,10 @@
*/
protected boolean closed = false;
+ /** The guard prevents an appender from repeatedly calling its own
+ doAppend method. */
+ private boolean guard = false;
+
/**
Derived appenders should override this method if option structure
@@ -203,22 +207,33 @@
return;
}
- if(!isAsSevereAsThreshold(event.getLevel())) {
+ // prevent re-entry
+ if(guard) {
return;
- }
+ }
- Filter f = this.headFilter;
-
+ try {
+ guard = true;
+
+ if(!isAsSevereAsThreshold(event.getLevel())) {
+ return;
+ }
+
+ Filter f = this.headFilter;
+
FILTER_LOOP:
- while(f != null) {
- switch(f.decide(event)) {
- case Filter.DENY: return;
- case Filter.ACCEPT: break FILTER_LOOP;
- case Filter.NEUTRAL: f = f.next;
+ while(f != null) {
+ switch(f.decide(event)) {
+ case Filter.DENY: return;
+ case Filter.ACCEPT: break FILTER_LOOP;
+ case Filter.NEUTRAL: f = f.next;
+ }
}
+
+ this.append(event);
+ } finally {
+ guard = false;
}
-
- this.append(event);
}
/**
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>