@@ -192,8 +192,10 @@ using AppenderListPtr = std::shared_ptr<const AppenderList>;
192192/* * A vector of appender pointers. */
193193struct AppenderAttachableImpl ::priv_data
194194{
195+ private:
195196 std::atomic<AppenderListPtr> pAppenderList;
196197
198+ public:
197199 priv_data (const AppenderList& newList = {})
198200 : pAppenderList{ std::make_shared<AppenderList>(newList) }
199201 {}
@@ -203,9 +205,9 @@ struct AppenderAttachableImpl::priv_data
203205 return pAppenderList.load (std::memory_order_acquire);
204206 }
205207
206- void setAppenders (const AppenderListPtr & newList)
208+ void setAppenders (const AppenderList & newList)
207209 {
208- pAppenderList.store (newList, std::memory_order_release);
210+ pAppenderList.store (std::make_shared<AppenderList>( newList) , std::memory_order_release);
209211 }
210212};
211213
@@ -218,8 +220,8 @@ void AppenderAttachableImpl::addAppender(const AppenderPtr newAppender)
218220 auto allAppenders = m_priv->getAppenders ();
219221 if (allAppenders->end () == std::find (allAppenders->begin (), allAppenders->end (), newAppender))
220222 {
221- auto newAppenders = std::make_shared<AppenderList>( *allAppenders) ;
222- newAppenders-> push_back (newAppender);
223+ auto newAppenders = *allAppenders;
224+ newAppenders. push_back (newAppender);
223225 m_priv->setAppenders (newAppenders);
224226 }
225227 }
@@ -286,7 +288,7 @@ void AppenderAttachableImpl::removeAllAppenders()
286288 auto allAppenders = m_priv->getAppenders ();
287289 for (auto & appender : *allAppenders)
288290 appender->close ();
289- m_priv->setAppenders (std::make_shared<AppenderList>() );
291+ m_priv->setAppenders ({} );
290292 }
291293}
292294
@@ -299,7 +301,7 @@ void AppenderAttachableImpl::removeAppender(const AppenderPtr appender)
299301 if (newAppenders.end () != pItem)
300302 {
301303 newAppenders.erase (pItem);
302- m_priv->setAppenders (std::make_shared<AppenderList>( newAppenders) );
304+ m_priv->setAppenders (newAppenders);
303305 }
304306 }
305307}
@@ -317,7 +319,7 @@ void AppenderAttachableImpl::removeAppender(const LogString& name)
317319 if (newAppenders.end () != pItem)
318320 {
319321 newAppenders.erase (pItem);
320- m_priv->setAppenders (std::make_shared<AppenderList>( newAppenders) );
322+ m_priv->setAppenders (newAppenders);
321323 }
322324 }
323325}
@@ -337,7 +339,7 @@ bool AppenderAttachableImpl::replaceAppender(const AppenderPtr& oldAppender, con
337339 if (newAppenders.end () != pItem)
338340 {
339341 *pItem = newAppender;
340- m_priv->setAppenders (std::make_shared<AppenderList>( newAppenders) );
342+ m_priv->setAppenders (newAppenders);
341343 found = true ;
342344 }
343345 }
@@ -351,7 +353,7 @@ void AppenderAttachableImpl::replaceAppenders(const AppenderList& newList)
351353 auto allAppenders = m_priv->getAppenders ();
352354 for (auto & a : *allAppenders)
353355 a->close ();
354- m_priv->setAppenders (std::make_shared<AppenderList>( newList) );
356+ m_priv->setAppenders (newList);
355357 }
356358 else
357359 m_priv = std::make_unique<priv_data>(newList);
0 commit comments