aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorleak <leak@bitmx.net>2014-06-24 21:09:43 +0200
committerleak <leak@bitmx.net>2014-06-24 21:10:07 +0200
commitd8d0b4730e4aece0ffe6a7b89bd74fb2940ea3fb (patch)
treee74e00612c90f3bd7e27fd38e68edd480caf5c8c /src
parentf03d49705dc7a0c00350119b319dcf9feb566529 (diff)
Revert "Removed ACE dependencies from LogWorker" This actually needs way more work
This reverts commit 0a592dd9dbd34818deee472dd42d700b4746a27e.
Diffstat (limited to 'src')
-rw-r--r--src/server/shared/Logging/Log.cpp2
-rw-r--r--src/server/shared/Logging/Log.h2
-rw-r--r--src/server/shared/Logging/LogWorker.cpp17
-rw-r--r--src/server/shared/Logging/LogWorker.h20
4 files changed, 29 insertions, 12 deletions
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 <stdarg.h>
+
#include <unordered_map>
#include <string>
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 <ace/Task.h>
+#include <ace/Activation_Queue.h>
+
+class LogWorker: protected ACE_Task_Base
{
public:
- LogWorker() {};
+ LogWorker();
~LogWorker();
- void enqueue(LogOperation& op);
+ typedef ACE_Message_Queue_Ex<LogOperation, ACE_MT_SYNCH> LogMessageQueueType;
+
+ enum
+ {
+ HIGH_WATERMARK = 8 * 1024 * 1024,
+ LOW_WATERMARK = 8 * 1024 * 1024
+ };
+
+ int enqueue(LogOperation *op);
private:
virtual int svc();
- LockedQueue<LogOperation> m_queue;
+ LogMessageQueueType m_queue;
};
#endif