yangxin created LOG4J2-1895:
-------------------------------

             Summary: 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


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