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)