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

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


The following commit(s) were added to refs/heads/master by this push:
     new ce8cfab5 Remove unnessessary indirection in AsyncAppender (#353)
ce8cfab5 is described below

commit ce8cfab5122de16206e1d253954abb8e457a3323
Author: Stephen Webb <[email protected]>
AuthorDate: Fri Feb 16 10:10:13 2024 +1100

    Remove unnessessary indirection in AsyncAppender (#353)
    
    * Preallocate buffer space
---
 src/main/cpp/asyncappender.cpp | 33 +++++++++++++++------------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 08b09889..5c540cff 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -100,9 +100,8 @@ struct AsyncAppender::AsyncAppenderPriv : public 
AppenderSkeleton::AppenderSkele
 {
        AsyncAppenderPriv() :
                AppenderSkeletonPrivate(),
-               buffer(),
                bufferSize(DEFAULT_BUFFER_SIZE),
-               appenders(std::make_shared<AppenderAttachableImpl>(pool)),
+               appenders(pool),
                dispatcher(),
                locationInfo(false),
                blocking(true)
@@ -148,7 +147,7 @@ struct AsyncAppender::AsyncAppenderPriv : public 
AppenderSkeleton::AppenderSkele
        /**
         * Nested appenders.
        */
-       helpers::AppenderAttachableImplPtr appenders;
+       helpers::AppenderAttachableImpl appenders;
 
        /**
         *  Dispatcher.
@@ -187,7 +186,7 @@ AsyncAppender::~AsyncAppender()
 
 void AsyncAppender::addAppender(const AppenderPtr newAppender)
 {
-       priv->appenders->addAppender(newAppender);
+       priv->appenders.addAppender(newAppender);
 }
 
 
@@ -224,7 +223,7 @@ void AsyncAppender::append(const spi::LoggingEventPtr& 
event, Pool& p)
 {
        if (priv->bufferSize <= 0)
        {
-               priv->appenders->appendLoopOnAppenders(event, p);
+               priv->appenders.appendLoopOnAppenders(event, p);
        }
 
        // Set the NDC and MDC for the calling thread as these
@@ -238,6 +237,7 @@ void AsyncAppender::append(const spi::LoggingEventPtr& 
event, Pool& p)
        if (!priv->dispatcher.joinable())
        {
                priv->dispatcher = ThreadUtility::instance()->createThread( 
LOG4CXX_STR("AsyncAppender"), &AsyncAppender::dispatch, this );
+               priv->buffer.reserve(priv->bufferSize);
        }
        while (true)
        {
@@ -313,7 +313,7 @@ void AsyncAppender::close()
                priv->dispatcher.join();
        }
 
-       for (auto item : priv->appenders->getAllAppenders())
+       for (auto item : priv->appenders.getAllAppenders())
        {
                item->close();
        }
@@ -321,17 +321,17 @@ void AsyncAppender::close()
 
 AppenderList AsyncAppender::getAllAppenders() const
 {
-       return priv->appenders->getAllAppenders();
+       return priv->appenders.getAllAppenders();
 }
 
 AppenderPtr AsyncAppender::getAppender(const LogString& n) const
 {
-       return priv->appenders->getAppender(n);
+       return priv->appenders.getAppender(n);
 }
 
 bool AsyncAppender::isAttached(const AppenderPtr appender) const
 {
-       return priv->appenders->isAttached(appender);
+       return priv->appenders.isAttached(appender);
 }
 
 bool AsyncAppender::requiresLayout() const
@@ -341,17 +341,17 @@ bool AsyncAppender::requiresLayout() const
 
 void AsyncAppender::removeAllAppenders()
 {
-       priv->appenders->removeAllAppenders();
+       priv->appenders.removeAllAppenders();
 }
 
 void AsyncAppender::removeAppender(const AppenderPtr appender)
 {
-       priv->appenders->removeAppender(appender);
+       priv->appenders.removeAppender(appender);
 }
 
 void AsyncAppender::removeAppender(const LogString& n)
 {
-       priv->appenders->removeAppender(n);
+       priv->appenders.removeAppender(n);
 }
 
 bool AsyncAppender::getLocationInfo() const
@@ -467,17 +467,14 @@ void AsyncAppender::dispatch()
                        );
                        isActive = !priv->closed;
 
-                       for (auto eventItem : priv->buffer)
-                       {
-                               events.push_back(eventItem);
-                       }
-
+                       events = std::move(priv->buffer);
                        for (auto discardItem : priv->discardMap)
                        {
                                
events.push_back(discardItem.second.createEvent(p));
                        }
 
                        priv->buffer.clear();
+                       priv->buffer.reserve(priv->bufferSize);
                        priv->discardMap.clear();
                        priv->bufferNotFull.notify_all();
                }
@@ -486,7 +483,7 @@ void AsyncAppender::dispatch()
                {
                        try
                        {
-                               priv->appenders->appendLoopOnAppenders(item, p);
+                               priv->appenders.appendLoopOnAppenders(item, p);
                        }
                        catch (std::exception& ex)
                        {

Reply via email to