From d8d0b4730e4aece0ffe6a7b89bd74fb2940ea3fb Mon Sep 17 00:00:00 2001 From: leak Date: Tue, 24 Jun 2014 21:09:43 +0200 Subject: Revert "Removed ACE dependencies from LogWorker" This actually needs way more work This reverts commit 0a592dd9dbd34818deee472dd42d700b4746a27e. --- src/server/shared/Logging/Log.cpp | 2 +- src/server/shared/Logging/Log.h | 2 +- src/server/shared/Logging/LogWorker.cpp | 17 ++++++++++++----- src/server/shared/Logging/LogWorker.h | 20 +++++++++++++++----- 4 files changed, 29 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index 68745046433..fd7aa84c0e9 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -273,7 +273,7 @@ void Log::write(LogMessage* msg) const msg->text.append("\n"); if (worker) - worker->enqueue(*(new LogOperation(logger, msg))); + worker->enqueue(new LogOperation(logger, msg)); else { logger->write(*msg); diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index 29ebdb3faa1..c3a47d14e9e 100644 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -23,7 +23,7 @@ #include "Appender.h" #include "Logger.h" #include "LogWorker.h" -#include + #include #include diff --git a/src/server/shared/Logging/LogWorker.cpp b/src/server/shared/Logging/LogWorker.cpp index cea4262032b..b0c82b614f4 100644 --- a/src/server/shared/Logging/LogWorker.cpp +++ b/src/server/shared/Logging/LogWorker.cpp @@ -17,22 +17,29 @@ #include "LogWorker.h" +LogWorker::LogWorker() + : m_queue(HIGH_WATERMARK, LOW_WATERMARK) +{ + ACE_Task_Base::activate(THR_NEW_LWP | THR_JOINABLE | THR_INHERIT_SCHED, 1); +} + LogWorker::~LogWorker() { - m_queue.cancel(); + m_queue.deactivate(); + wait(); } -void LogWorker::enqueue(LogOperation& op) +int LogWorker::enqueue(LogOperation* op) { - return m_queue.add(op); + return m_queue.enqueue(op); } int LogWorker::svc() { while (1) { - LogOperation* request = nullptr; - if (!m_queue.next(*request)) + LogOperation* request; + if (m_queue.dequeue(request) == -1) break; request->call(); diff --git a/src/server/shared/Logging/LogWorker.h b/src/server/shared/Logging/LogWorker.h index 84d8ba632a8..25a57842e08 100644 --- a/src/server/shared/Logging/LogWorker.h +++ b/src/server/shared/Logging/LogWorker.h @@ -19,19 +19,29 @@ #define LOGWORKER_H #include "LogOperation.h" -#include "LockedQueue.h" -class LogWorker +#include +#include + +class LogWorker: protected ACE_Task_Base { public: - LogWorker() {}; + LogWorker(); ~LogWorker(); - void enqueue(LogOperation& op); + typedef ACE_Message_Queue_Ex LogMessageQueueType; + + enum + { + HIGH_WATERMARK = 8 * 1024 * 1024, + LOW_WATERMARK = 8 * 1024 * 1024 + }; + + int enqueue(LogOperation *op); private: virtual int svc(); - LockedQueue m_queue; + LogMessageQueueType m_queue; }; #endif -- cgit v1.2.3