You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sw...@apache.org on 2024/04/23 12:08:34 UTC

(logging-log4cxx) branch prefer_lock_guard created (now eaddaa1e)

This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a change to branch prefer_lock_guard
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git


      at eaddaa1e Keep mutex locked when changing the variable that change the condition

This branch includes the following new commits:

     new eaddaa1e Keep mutex locked when changing the variable that change the condition

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(logging-log4cxx) 01/01: Keep mutex locked when changing the variable that change the condition

Posted by sw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch prefer_lock_guard
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git

commit eaddaa1e5b7f3ba40517479587977c475b3654b2
Author: Stephen Webb <sw...@gmail.com>
AuthorDate: Tue Apr 23 22:08:15 2024 +1000

    Keep mutex locked when changing the variable that change the condition
---
 src/main/cpp/filewatchdog.cpp           |  5 ++++-
 src/main/cpp/socketappenderskeleton.cpp | 16 +++++++++-------
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/main/cpp/filewatchdog.cpp b/src/main/cpp/filewatchdog.cpp
index e51c5931..742423b5 100644
--- a/src/main/cpp/filewatchdog.cpp
+++ b/src/main/cpp/filewatchdog.cpp
@@ -73,7 +73,10 @@ bool FileWatchdog::is_active()
 void FileWatchdog::stop()
 {
 	LogLog::debug(LOG4CXX_STR("Stopping file watchdog"));
-	m_priv->interrupted = 0xFFFF;
+	{
+		std::lock_guard<std::mutex> lock(m_priv->interrupt_mutex);
+		m_priv->interrupted = 0xFFFF;
+	}
 	m_priv->interrupt.notify_all();
 	m_priv->thread.join();
 }
diff --git a/src/main/cpp/socketappenderskeleton.cpp b/src/main/cpp/socketappenderskeleton.cpp
index 76f1a423..a7e984a0 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -68,15 +68,17 @@ void SocketAppenderSkeleton::activateOptions(Pool& p)
 
 void SocketAppenderSkeleton::close()
 {
-	std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
-
-	if (_priv->closed)
 	{
-		return;
-	}
+		std::lock_guard<std::mutex> lock(_priv->interrupt_mutex);
+
+		if (_priv->closed)
+		{
+			return;
+		}
 
-	_priv->closed = true;
-	cleanUp(_priv->pool);
+		_priv->closed = true;
+		cleanUp(_priv->pool);
+	}
 	_priv->interrupt.notify_all();
 	if ( _priv->thread.joinable() )
 	{