This is an automated email from the ASF dual-hosted git repository. ckozak pushed a commit to branch LOG4J2-2606 in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 9168b4b6bc0c9c7572932bb316f6560d6f332ab9 Author: Carter Kozak <[email protected]> AuthorDate: Wed May 22 17:01:38 2019 -0400 Disallow recursive synchronization, share synchronizeEnqueueWhenQueueFull --- .../logging/log4j/core/async/AsyncLoggerConfigDisruptor.java | 4 +--- .../apache/logging/log4j/core/async/AsyncLoggerDisruptor.java | 4 +--- .../org/apache/logging/log4j/core/async/DisruptorUtil.java | 11 +++++++++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java index 9d3ef58..4805e8a 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java @@ -386,9 +386,7 @@ public class AsyncLoggerConfigDisruptor extends AbstractLifeCycle implements Asy } private boolean synchronizeEnqueueWhenQueueFull() { - return queueFullEnqueueSemaphore != null - // Background thread must never block - && backgroundThreadId != Thread.currentThread().getId(); + return DisruptorUtil.synchronizeEnqueueWhenQueueFull(queueFullEnqueueSemaphore, backgroundThreadId); } @Override diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java index 9d79e88..f23a5cc 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java @@ -289,9 +289,7 @@ class AsyncLoggerDisruptor extends AbstractLifeCycle { } private boolean synchronizeEnqueueWhenQueueFull() { - return queueFullEnqueueSemaphore != null - // Background thread must never block - && backgroundThreadId != Thread.currentThread().getId(); + return DisruptorUtil.synchronizeEnqueueWhenQueueFull(queueFullEnqueueSemaphore, backgroundThreadId); } private void logWarningOnNpeFromDisruptorPublish(final RingBufferLogEventTranslator translator) { diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java index 298faef..0e01145 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java @@ -35,6 +35,7 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.util.Constants; import org.apache.logging.log4j.core.util.Integers; import org.apache.logging.log4j.core.util.Loader; +import org.apache.logging.log4j.spi.AbstractLogger; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.PropertiesUtil; @@ -183,4 +184,14 @@ final class DisruptorUtil { } return null; } + + static boolean synchronizeEnqueueWhenQueueFull( + Semaphore queueFullEnqueueSemaphore, // nullable + long backgroundThreadId) { + return queueFullEnqueueSemaphore != null + // Background thread must never block + && backgroundThreadId != Thread.currentThread().getId() + // Semaphore is not re-entrant, we must avoid attempting to acquire it from recursive logging + && AbstractLogger.getRecursionDepth() <= 1; + } }
