[ 
https://issues.apache.org/jira/browse/LOG4J2-205?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Werner  updated LOG4J2-205:
---------------------------

    Attachment: SocketAppenderTest.java

JUnitTest for SocketAppender
                
> 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
>         Attachments: SocketAppenderTest.java
>
>
> 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