Skip to content

Commit

Permalink
Use separate synchronization for the Hierarchy listener list
Browse files Browse the repository at this point in the history
  • Loading branch information
stephen-webb committed Jul 21, 2024
1 parent ea628f4 commit ecc8011
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/main/cpp/hierarchy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ struct Hierarchy::HierarchyPrivate
ProvisionNodeMap provisionNodes;

std::vector<AppenderPtr> allAppenders;

mutable std::mutex listenerMutex;
};

IMPLEMENT_LOG4CXX_OBJECT(Hierarchy)
Expand Down Expand Up @@ -91,7 +93,7 @@ Hierarchy::~Hierarchy()

void Hierarchy::addHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener)
{
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);

if (std::find(m_priv->listeners.begin(), m_priv->listeners.end(), listener) != m_priv->listeners.end())
{
Expand All @@ -105,7 +107,7 @@ void Hierarchy::addHierarchyEventListener(const spi::HierarchyEventListenerPtr&

void Hierarchy::removeHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener)
{
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);

auto found = std::find(m_priv->listeners.begin(), m_priv->listeners.end(), listener);
if(found != m_priv->listeners.end()){
Expand Down Expand Up @@ -194,7 +196,7 @@ void Hierarchy::fireAddAppenderEvent(const Logger* logger, const Appender* appen
setConfigured(true);
HierarchyEventListenerList clonedList;
{
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);
clonedList = m_priv->listeners;
}

Expand All @@ -207,7 +209,7 @@ void Hierarchy::fireRemoveAppenderEvent(const Logger* logger, const Appender* ap
{
HierarchyEventListenerList clonedList;
{
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);
clonedList = m_priv->listeners;
}
for (auto& item : clonedList)
Expand Down

0 comments on commit ecc8011

Please sign in to comment.