You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2010/04/07 22:51:15 UTC

svn commit: r931682 - in /qpid/trunk/qpid/cpp: include/qpid/log/Logger.h src/qpid/log/Logger.cpp

Author: aconway
Date: Wed Apr  7 20:51:14 2010
New Revision: 931682

URL: http://svn.apache.org/viewvc?rev=931682&view=rev
Log:
Use read-write lock to imporve Logger concurrency.

Modified:
    qpid/trunk/qpid/cpp/include/qpid/log/Logger.h
    qpid/trunk/qpid/cpp/src/qpid/log/Logger.cpp

Modified: qpid/trunk/qpid/cpp/include/qpid/log/Logger.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/log/Logger.h?rev=931682&r1=931681&r2=931682&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/log/Logger.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/log/Logger.h Wed Apr  7 20:51:14 2010
@@ -98,6 +98,7 @@ class Logger : private boost::noncopyabl
     typedef std::set<Statement*> Statements;
 
     sys::Mutex lock;
+    sys::RWlock outputsLock;
     inline void enable_unlocked(Statement* s);
 
     Statements statements;

Modified: qpid/trunk/qpid/cpp/src/qpid/log/Logger.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/log/Logger.cpp?rev=931682&r1=931681&r2=931682&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/log/Logger.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/log/Logger.cpp Wed Apr  7 20:51:14 2010
@@ -90,21 +90,21 @@ void Logger::log(const Statement& s, con
     os << msg << endl;
     std::string formatted=os.str();
     {
-        ScopedLock l(lock);
+        sys::RWlock::ScopedRlock l(outputsLock);
         std::for_each(outputs.begin(), outputs.end(),
                       boost::bind(&Output::log, _1, s, formatted));
     }
 }
 
 void Logger::output(std::auto_ptr<Output> out) {
-    ScopedLock l(lock);
+    sys::RWlock::ScopedWlock l(outputsLock);
     outputs.push_back(out.release());
 }
 
 void Logger::clear() {
     select(Selector());         // locked
     format(0);                  // locked
-    ScopedLock l(lock);
+    sys::RWlock::ScopedWlock l(outputsLock);
     outputs.clear();
 }
 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org