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]