LOG4J2-1343 do not synchronize on the appender Manager while converting the 
LogEvent to text: this may result in deadlocks


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/794af49a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/794af49a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/794af49a

Branch: refs/heads/LOG4J2-1356
Commit: 794af49a6f1ec1970c605bca04a38251684ab262
Parents: acf8e34
Author: rpopma <[email protected]>
Authored: Fri Apr 8 19:50:31 2016 +0900
Committer: rpopma <[email protected]>
Committed: Fri Apr 8 19:50:31 2016 +0900

----------------------------------------------------------------------
 .../core/appender/AbstractOutputStreamAppender.java   | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/794af49a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
index dcd0556..85faf43 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
@@ -122,14 +122,12 @@ public abstract class AbstractOutputStreamAppender<M 
extends OutputStreamManager
     }
 
     protected void directEncodeEvent(final LogEvent event) {
-        synchronized (manager) {
-            getLayout().encode(event, manager.getByteBufferDestination());
-            if (!manager.isBufferedIO()) { // buffering was not requested by 
the user
-                manager.flushBuffer(); // we're not allowed to leave anything 
in the buffer: drain buffer into manager
-            }
-            if (this.immediateFlush || event.isEndOfBatch()) {
-                manager.flush();
-            }
+        getLayout().encode(event, manager.getByteBufferDestination());
+        if (!manager.isBufferedIO()) { // buffering was not requested by the 
user
+            manager.flushBuffer(); // we're not allowed to leave anything in 
the buffer: drain buffer into manager
+        }
+        if (this.immediateFlush || event.isEndOfBatch()) {
+            manager.flush();
         }
     }
 

Reply via email to