[ 
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)

Reply via email to