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 2026/05/31 08:08:33 UTC
(logging-log4cxx) 02/02: Ensure a change to the shared ThreadUtility isActive flag is visible
This is an automated email from the ASF dual-hosted git repository.
swebb2066 pushed a commit to branch symplify_thread_utiltiy
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit f9f42d3ba4014c4d53ed0f58c12aba62f736a016
Merge: 1cb74b81 ba5b469a
Author: Stephen Webb <sw...@gmail.com>
AuthorDate: Sun May 31 16:09:37 2026 +1000
Ensure a change to the shared ThreadUtility isActive flag is visible
src/main/cpp/threadutility.cpp | 10 ++++++++--
src/test/cpp/CMakeLists.txt | 5 ++++-
src/test/cpp/fileappendertest.cpp | 3 +++
3 files changed, 15 insertions(+), 3 deletions(-)
diff --cc src/main/cpp/threadutility.cpp
index 63195442,0ffcc140..e5cf569a
--- a/src/main/cpp/threadutility.cpp
+++ b/src/main/cpp/threadutility.cpp
@@@ -87,9 -87,15 +87,15 @@@ struct ThreadUtility::priv_dat
void doPeriodicTasks();
- void stopThread()
+ void setTerminated()
{
- std::lock_guard<std::mutex> lock(interrupt_mutex);
++ std::lock_guard<std::recursive_mutex> lock(job_mutex);
terminated.store(true);
+ }
+
+ void stopThread()
+ {
+ setTerminated();
interrupt.notify_all();
if (thread.joinable())
thread.join();
@@@ -274,12 -280,8 +280,12 @@@ void ThreadUtility::addPeriodicTask(con
if (!m_priv->thread.joinable())
{
m_priv->terminated.store(false);
- m_priv->threadIsActive = true;
- m_priv->thread = createThread(LOG4CXX_STR("log4cxx"), std::bind(&priv_data::doPeriodicTasks, m_priv.get()));
++ m_priv->threadIsActive.store(true);
+ m_priv->thread = createThread(LOG4CXX_STR("log4cxx"), [this]()
+ {
- m_priv->threadIsActive.store(true);
+ m_priv->doPeriodicTasks();
+ m_priv->threadIsActive.store(false);
+ });
}
else
m_priv->interrupt.notify_one();
diff --cc src/test/cpp/CMakeLists.txt
index f20a84f8,f20a84f8..28ebd7cf
--- a/src/test/cpp/CMakeLists.txt
+++ b/src/test/cpp/CMakeLists.txt
@@@ -124,7 -124,7 +124,10 @@@ else(
set(TEST_COMPILE_DEFINITIONS _DEBUG)
endif()
if(LOG4CXX_TEST_ONLY_BUILD)
-- list(APPEND TEST_COMPILE_DEFINITIONS "ENABLE_FAILING_APPENDER_SIMULATION_TESTING=1")
++ list(APPEND TEST_COMPILE_DEFINITIONS
++ "ENABLE_FAILING_APPENDER_SIMULATION_TESTING=1"
++ "LOGLOG_THRESHOLD=1"
++ )
endif()
get_filename_component(UNIT_TEST_WORKING_DIR ../resources ABSOLUTE)
diff --cc src/test/cpp/fileappendertest.cpp
index 1c874b46,1c874b46..c87c0bae
--- a/src/test/cpp/fileappendertest.cpp
+++ b/src/test/cpp/fileappendertest.cpp
@@@ -159,6 -159,6 +159,7 @@@ public
{
int requiredMsgCount = 100;
auto logger = getLogger(LOG4CXX_STR("100message"));
++ LOGLOG_DEBUG(logger, "writeFinalBufferOutput: " << "configuing");
// Set up a new file
LogString dir{ LOG4CXX_STR("output/newdir") };
@@@ -174,10 -174,10 +175,12 @@@
logger->setAdditivity(false);
logger->addAppender(writer);
++ LOGLOG_DEBUG(logger, "writeFinalBufferOutput: " << "started");
for ( int x = 0; x < requiredMsgCount; x++ )
{
LOG4CXX_INFO( logger, "This is test message " << x );
}
++ LOGLOG_DEBUG(logger, "writeFinalBufferOutput: " << "stopped");
}
void checkFinalBufferOutput()