You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ck...@apache.org on 2018/06/30 02:51:45 UTC
logging-log4j2 git commit: LOG4J2-2362 ReusableObjectMessage memory
leak
Repository: logging-log4j2
Updated Branches:
refs/heads/master 4bfefbb5b -> 4050cf639
LOG4J2-2362 ReusableObjectMessage memory leak
ReusableObjectMessage would previously retain a reference to
the most recently logged object.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4050cf63
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4050cf63
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4050cf63
Branch: refs/heads/master
Commit: 4050cf63950b3fa2ff41cc54918b2281de9095ef
Parents: 4bfefbb
Author: Carter Kozak <ck...@apache.org>
Authored: Fri Jun 29 16:02:55 2018 -0400
Committer: Carter Kozak <ck...@apache.org>
Committed: Fri Jun 29 22:51:31 2018 -0400
----------------------------------------------------------------------
.../logging/log4j/message/ReusableMessageFactory.java | 2 ++
.../java/org/apache/logging/log4j/LambdaLoggerTest.java | 5 ++++-
.../logging/log4j/core/EventParameterMemoryLeakTest.java | 10 ++++++++--
src/changes/changes.xml | 6 ++++++
4 files changed, 20 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4050cf63/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
index d75ca01..c258045 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
@@ -86,6 +86,8 @@ public final class ReusableMessageFactory implements MessageFactory2, Serializab
public static void release(final Message message) { // LOG4J2-1583
if (message instanceof ReusableParameterizedMessage) {
((ReusableParameterizedMessage) message).reserved = false;
+ } else if (message instanceof ReusableObjectMessage) {
+ ((ReusableObjectMessage) message).set(null);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4050cf63/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
index f6d1623..b532171 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.message.Message;
+import org.apache.logging.log4j.message.ReusableMessage;
import org.apache.logging.log4j.message.SimpleMessage;
import org.apache.logging.log4j.spi.AbstractLogger;
import org.apache.logging.log4j.util.Supplier;
@@ -46,7 +47,9 @@ public class LambdaLoggerTest {
this.fqcn = fqcn;
this.level = level;
this.marker = marker;
- this.message = message;
+ this.message = (message instanceof ReusableMessage) ?
+ ((ReusableMessage) message).memento() :
+ message;
this.throwable = t;
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4050cf63/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
index de99eef..d2106f9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
@@ -49,21 +49,27 @@ public class EventParameterMemoryLeakTest {
}
@Test
+ @SuppressWarnings("UnusedAssignment") // parameter set to null to allow garbage collection
public void testParametersAreNotLeaked() throws Exception {
final File file = new File("target", "EventParameterMemoryLeakTest.log");
assertTrue("Deleted old file before test", !file.exists() || file.delete());
final Logger log = LogManager.getLogger("com.foo.Bar");
CountDownLatch latch = new CountDownLatch(1);
- log.info("Message with parameter {}", new ParameterObject("paramValue", latch));
+ Object parameter = new ParameterObject("paramValue", latch);
+ log.info("Message with parameter {}", parameter);
+ log.info(parameter);
+ parameter = null;
CoreLoggerContexts.stopLoggerContext(file);
final BufferedReader reader = new BufferedReader(new FileReader(file));
final String line1 = reader.readLine();
final String line2 = reader.readLine();
+ final String line3 = reader.readLine();
reader.close();
file.delete();
assertThat(line1, containsString("Message with parameter paramValue"));
- assertNull("Expected only a single line", line2);
+ assertThat(line2, containsString("paramValue"));
+ assertNull("Expected only a two lines", line3);
GarbageCollectionHelper gcHelper = new GarbageCollectionHelper();
gcHelper.run();
try {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4050cf63/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index cd89a1a..9d2a37d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -194,6 +194,9 @@
<action issue="LOG4J2-2357" dev="ggregory" type="update">
Update Jackson from 2.9.5 to 2.9.6.
</action>
+ <action issue="LOG4J2-2362" dev="ckozak" type="fix">
+ Fixed a memory leak in which ReusableObjectMessage would hold a reference to the most recently logged object.
+ </action>
</release>
<release version="2.11.1" date="2018-MM-DD" description="GA Release 2.11.1">
<action issue="LOG4J2-2268" dev="rgoers" type="fix" due-to="Tilman Hausherr">
@@ -284,6 +287,9 @@
<action issue="LOG4J2-2358" dev="ggregory" type="update">
Update Kafka client from 1.0.0 to 1.1.0.
</action>
+ <action issue="LOG4J2-2362" dev="ckozak" type="fix">
+ Fixed a memory leak in which ReusableObjectMessage would hold a reference to the most recently logged object.
+ </action>
</release>
<release version="2.11.0" date="2018-xx-xx" description="GA Release 2.11.0">
<action issue="LOG4J2-2104" dev="rgoers" type="fix">