Index: log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java (revision e4bca837b5d99c982e9126e869665e9c83cad1dd) +++ log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java (revision ) @@ -18,6 +18,8 @@ package org.apache.logging.log4j.core.filter; import java.util.List; +import java.util.concurrent.Delayed; +import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.junit.InitialLoggerContext; @@ -26,6 +28,8 @@ import org.junit.ClassRule; import org.junit.Test; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; import static org.junit.Assert.*; /** * Unit test for BurstFilter. @@ -48,6 +52,19 @@ private BurstFilter filter; private final Logger logger = context.getLogger(); + + @Test + public void compareToOverflow() { + BurstFilter.LogDelay d1 = new BurstFilter.LogDelay(); + // no overflow, but close + d1.setDelay(Long.MAX_VALUE - TimeUnit.SECONDS.toNanos(10) - System.nanoTime()); + + BurstFilter.LogDelay d2 = new BurstFilter.LogDelay(); + // Overflow + d2.setDelay(Long.MAX_VALUE + TimeUnit.SECONDS.toNanos(10) - System.nanoTime()); + + assertThat((Delayed) d2, is(greaterThan((Delayed) d1))); + } /** * Test BurstFilter by surpassing maximum number of log messages allowed by filter and Index: log4j-core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- log4j-core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java (revision e4bca837b5d99c982e9126e869665e9c83cad1dd) +++ log4j-core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java (revision ) @@ -168,7 +168,7 @@ /** * Delay object to represent each log event that has occurred within the timespan. */ - private class LogDelay implements Delayed { + static class LogDelay implements Delayed { private long expireTime; @@ -186,9 +186,10 @@ @Override public int compareTo(final Delayed delayed) { - if (this.expireTime < ((LogDelay) delayed).expireTime) { + final long diff = this.expireTime - ((LogDelay) delayed).expireTime; + if (diff < 0) { return -1; - } else if (this.expireTime > ((LogDelay) delayed).expireTime) { + } else if (diff > 0) { return 1; } return 0;