diff options
Diffstat (limited to 'qpid/cpp')
| -rw-r--r-- | qpid/cpp/include/qpid/log/Logger.h | 1 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/log/Logger.cpp | 6 |
2 files changed, 4 insertions, 3 deletions
diff --git a/qpid/cpp/include/qpid/log/Logger.h b/qpid/cpp/include/qpid/log/Logger.h index d7da1f077a..80622365b1 100644 --- a/qpid/cpp/include/qpid/log/Logger.h +++ b/qpid/cpp/include/qpid/log/Logger.h @@ -98,6 +98,7 @@ class Logger : private boost::noncopyable { typedef std::set<Statement*> Statements; sys::Mutex lock; + sys::RWlock outputsLock; inline void enable_unlocked(Statement* s); Statements statements; diff --git a/qpid/cpp/src/qpid/log/Logger.cpp b/qpid/cpp/src/qpid/log/Logger.cpp index 939e2502cc..65b4568e74 100644 --- a/qpid/cpp/src/qpid/log/Logger.cpp +++ b/qpid/cpp/src/qpid/log/Logger.cpp @@ -90,21 +90,21 @@ void Logger::log(const Statement& s, const std::string& msg) { 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(); } |
