[
https://issues.apache.org/jira/browse/LOG4J2-1895?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15998862#comment-15998862
]
Matt Sicker commented on LOG4J2-1895:
-------------------------------------
Aren't those all unit tests? Although I wonder if that means there is some
undefined behavior in the tests which would certainly be something worth fixing.
> Potential data race about ArrayList
> -----------------------------------
>
> Key: LOG4J2-1895
> URL: https://issues.apache.org/jira/browse/LOG4J2-1895
> Project: Log4j 2
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.8.1
> Environment: Window10, JDK8
> Reporter: yangxin
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> I'm doing some concurrency test about Log4j2.
> Maybe there are some potential data race :
> {code:xml}
> Data race on field java.util.ArrayList.$state: {
> Concurrent read in thread T1 (locks held: {})
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.checkTheNumberOfSentAndReceivedMessages(SyslogAppenderTestBase.java:111)
> T1 is the main thread
> Concurrent write in thread T19 (locks held: {})
> at
> org.apache.logging.log4j.core.net.mock.MockUdpSyslogServer.run(MockUdpSyslogServer.java:51)
> T19 is created by T1
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTest.initUDPTestEnvironment(SyslogAppenderTest.java:95)
> }
> {code}
> Related documents are as follows:
> {code:title=SyslogAppenderTestBase.java|borderStyle=solid}
> protected void checkTheNumberOfSentAndReceivedMessages() throws
> InterruptedException {
> assertEquals("The number of received messages should be equal with
> the number of sent messages",
> sentMessages.size(),
> getReceivedMessages(DEFAULT_TIMEOUT_IN_MS).size());
> }
> {code}
> {code:title=MockUdpSyslogServer.java|borderStyle=solid}
> public void run() {
> this.thread = Thread.currentThread();
> final byte[] bytes = new byte[4096];
> final DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
> try {
> while (!shutdown) {
> socket.receive(packet);
> final String str = new String(packet.getData(), 0,
> packet.getLength());
> messageList.add(str);
> }
> } catch (final Exception e) {
> if (!shutdown) {
> Throwables.rethrow(e);
> }
> }
> }
> {code}
> The following is some similar report :
> {code:xml}
> Data race on field java.util.ArrayList.$state: {
> Concurrent read in thread T1 (locks held: {})
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.checkTheNumberOfSentAndReceivedMessages(SyslogAppenderTestBase.java:111)
> T1 is the main thread
> Concurrent write in thread T17 (locks held: {})
> at
> org.apache.logging.log4j.core.net.mock.MockTcpSyslogServer.run(MockTcpSyslogServer.java:59)
> T17 is created by T1
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTest.initTCPTestEnvironment(SyslogAppenderTest.java:101)
> }
> {code}
> {code:xml}
> Data race on field java.util.ArrayList.$state: {
> Concurrent read in thread T1 (locks held: {})
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.checkTheEqualityOfSentAndReceivedMessages(SyslogAppenderTestBase.java:118)
> T1 is the main thread
> Concurrent write in thread T19 (locks held: {})
> at
> org.apache.logging.log4j.core.net.mock.MockUdpSyslogServer.run(MockUdpSyslogServer.java:51)
> T19 is created by T1
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTest.initUDPTestEnvironment(SyslogAppenderTest.java:95)
> }
> {code}
> {code:xml}
> Data race on field java.util.ArrayList.$state: {
> Concurrent read in thread T1 (locks held: {})
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.checkTheEqualityOfSentAndReceivedMessages(SyslogAppenderTestBase.java:118)
> T1 is the main thread
> Concurrent write in thread T17 (locks held: {})
> at
> org.apache.logging.log4j.core.net.mock.MockTcpSyslogServer.run(MockTcpSyslogServer.java:59)
> T17 is created by T1
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTest.initTCPTestEnvironment(SyslogAppenderTest.java:101)
> }
> {code}
> {code:xml}
> Data race on field java.util.ArrayList.$state: {
> Concurrent read in thread T1 (locks held: {})
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.checkTheEqualityOfSentAndReceivedMessages(SyslogAppenderTestBase.java:119)
> T1 is the main thread
> Concurrent write in thread T19 (locks held: {})
> at
> org.apache.logging.log4j.core.net.mock.MockUdpSyslogServer.run(MockUdpSyslogServer.java:51)
> T19 is created by T1
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTest.initUDPTestEnvironment(SyslogAppenderTest.java:95)
> }
> {code}
> {code:xml}
> Data race on field java.util.ArrayList.$state: {
> Concurrent read in thread T1 (locks held: {})
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.checkTheEqualityOfSentAndReceivedMessages(SyslogAppenderTestBase.java:119)
> T1 is the main thread
> Concurrent write in thread T17 (locks held: {})
> at
> org.apache.logging.log4j.core.net.mock.MockTcpSyslogServer.run(MockTcpSyslogServer.java:59)
> T17 is created by T1
> at
> org.apache.logging.log4j.core.appender.SyslogAppenderTest.initTCPTestEnvironment(SyslogAppenderTest.java:101)
> }
> {code}
> {code:xml}
> Data race on field java.util.ArrayList.$state: {
> Concurrent read in thread T1 (locks held: {})
> at
> org.apache.logging.log4j.test.appender.ListAppender.getMessages(ListAppender.java:213)
> T1 is the main thread
> Concurrent write in thread T17 (locks held: {Monitor@63b1d4fa})
> at
> org.apache.logging.log4j.test.appender.ListAppender.write(ListAppender.java:173)
> T17 is created by T1
> at
> org.apache.logging.log4j.core.appender.AsyncAppender.start(AsyncAppender.java:124)
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)