Skip to content

Commit ecc8011

Browse files
committed
Use separate synchronization for the Hierarchy listener list
1 parent ea628f4 commit ecc8011

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/main/cpp/hierarchy.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ struct Hierarchy::HierarchyPrivate
6262
ProvisionNodeMap provisionNodes;
6363

6464
std::vector<AppenderPtr> allAppenders;
65+
66+
mutable std::mutex listenerMutex;
6567
};
6668

6769
IMPLEMENT_LOG4CXX_OBJECT(Hierarchy)
@@ -91,7 +93,7 @@ Hierarchy::~Hierarchy()
9193

9294
void Hierarchy::addHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener)
9395
{
94-
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
96+
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);
9597

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

106108
void Hierarchy::removeHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener)
107109
{
108-
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
110+
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);
109111

110112
auto found = std::find(m_priv->listeners.begin(), m_priv->listeners.end(), listener);
111113
if(found != m_priv->listeners.end()){
@@ -194,7 +196,7 @@ void Hierarchy::fireAddAppenderEvent(const Logger* logger, const Appender* appen
194196
setConfigured(true);
195197
HierarchyEventListenerList clonedList;
196198
{
197-
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
199+
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);
198200
clonedList = m_priv->listeners;
199201
}
200202

@@ -207,7 +209,7 @@ void Hierarchy::fireRemoveAppenderEvent(const Logger* logger, const Appender* ap
207209
{
208210
HierarchyEventListenerList clonedList;
209211
{
210-
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
212+
std::lock_guard<std::mutex> lock(m_priv->listenerMutex);
211213
clonedList = m_priv->listeners;
212214
}
213215
for (auto& item : clonedList)

0 commit comments

Comments
 (0)