This is an automated email from the ASF dual-hosted git repository.
swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
The following commit(s) were added to refs/heads/master by this push:
new fc6393e5 Prevent the SocketAppender connection monitor thread causing
a deadlock on exit (#287)
fc6393e5 is described below
commit fc6393e5e05467d10a0d2029a9012b3e42f03c27
Author: Stephen Webb <[email protected]>
AuthorDate: Sat Nov 11 11:20:26 2023 +1100
Prevent the SocketAppender connection monitor thread causing a deadlock on
exit (#287)
Co-authored-by: Stephen Webb <[email protected]>
---
src/main/cpp/socketappenderskeleton.cpp | 33 +++++++++++++--------------------
1 file changed, 13 insertions(+), 20 deletions(-)
diff --git a/src/main/cpp/socketappenderskeleton.cpp
b/src/main/cpp/socketappenderskeleton.cpp
index 32a985b0..677e811e 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -163,24 +163,20 @@ void SocketAppenderSkeleton::monitor()
{
Pool p;
SocketPtr socket;
- bool isClosed = _priv->closed;
- while (!isClosed)
+ while (!is_closed())
{
try
{
- if (!_priv->closed)
- {
- LogString msg(LOG4CXX_STR("Attempting
connection to [")
- + _priv->address->toString() +
LOG4CXX_STR(":"));
- StringHelper::toString(_priv->port, p, msg);
- msg += LOG4CXX_STR("].");
- LogLog::debug(msg);
- socket = Socket::create(_priv->address,
_priv->port);
- setSocket(socket, p);
- LogLog::debug(LOG4CXX_STR("Connection
established. Exiting connector thread."));
- return;
- }
+ LogString msg(LOG4CXX_STR("Attempting connection to [")
+ + _priv->address->toString() +
LOG4CXX_STR(":"));
+ StringHelper::toString(_priv->port, p, msg);
+ msg += LOG4CXX_STR("].");
+ LogLog::debug(msg);
+ socket = Socket::create(_priv->address, _priv->port);
+ setSocket(socket, p);
+ LogLog::debug(LOG4CXX_STR("Connection established.
Exiting connector thread."));
+ return;
}
catch (ConnectException& e)
{
@@ -208,14 +204,11 @@ void SocketAppenderSkeleton::monitor()
LogLog::debug(msg);
std::unique_lock<std::mutex> lock(
_priv->interrupt_mutex );
- _priv->interrupt.wait_for( lock,
std::chrono::milliseconds( _priv->reconnectionDelay ),
- std::bind(&SocketAppenderSkeleton::is_closed,
this) );
+ if (_priv->interrupt.wait_for( lock,
std::chrono::milliseconds( _priv->reconnectionDelay ),
+ std::bind(&SocketAppenderSkeleton::is_closed,
this) ))
+ break;
}
-
- isClosed = _priv->closed;
}
-
- LogLog::debug(LOG4CXX_STR("Exiting Connector.run() method."));
}
bool SocketAppenderSkeleton::is_closed()