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()

Reply via email to