Werner  created LOG4J2-205:
------------------------------

             Summary: Deadlock with SocketAppender
                 Key: LOG4J2-205
                 URL: https://issues.apache.org/jira/browse/LOG4J2-205
             Project: Log4j 2
          Issue Type: Bug
          Components: Appenders
    Affects Versions: 2.0-beta4
            Reporter: Werner 
            Priority: Critical


We found a Deadlock in the SocketAppender (TCPSocketManager.java), when the 
reconnectionDelay is used.
A JUnit-Testcase (testTcpAppenderDeadlock()) has been attached, which 
reproduced the deadlock.

Description of the JUnit-Testcase:
•       No SocketServer is startet
•       We generate a SocketAppender with a reconnectionDelay= 10sec
•       The SocketAppender acknowledges that no SocktServer is there, and start 
the timeout
•       During reconnectionDelay the SocketServer started and something is 
logged 
•       Now the user-thread (here the JUNIT-Thread) and the Reconnector-Thread 
are blocking each other forever


An additional Issue occurs: 
If no SocketServer is available at the start of the SocketAppender, each 
user-thread is blocked at every logging operation up to the defined 
reconnection-time!


Recommended solution:
TCPSocketManager.java
    @Override
    protected synchronized void write(final byte[] bytes, final int offset, 
final int length)  {
//        if (socket == null) {
//            if (connector != null) {
//                connector.latch();
//            }
//            if (socket == null) {
//                final String msg = "Error writing to " + getName() + " socket 
not available";
//                throw new AppenderRuntimeException(msg);
//            }
//        }
       if (socket == null) {
                        if (connector != null) {
                                return;
                        } else {
                                final String msg = "Error writing to " + 
getName()
                                                + " socket not available";
                                throw new AppenderRuntimeException(msg);
                        }
}



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to