aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared/Logging')
-rw-r--r--src/server/shared/Logging/Log.cpp2
-rw-r--r--src/server/shared/Logging/Log.h1
-rw-r--r--src/server/shared/Logging/LogWorker.cpp34
-rw-r--r--src/server/shared/Logging/LogWorker.h27
4 files changed, 35 insertions, 29 deletions
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index fd7aa84c0e9..57d8797e61e 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 c3a47d14e9e..8d2fd33d886 100644
--- a/src/server/shared/Logging/Log.h
+++ b/src/server/shared/Logging/Log.h
@@ -23,6 +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 b0c82b614f4..ab0f41bf105 100644
--- a/src/server/shared/Logging/LogWorker.cpp
+++ b/src/server/shared/Logging/LogWorker.cpp
@@ -16,35 +16,41 @@
*/
#include "LogWorker.h"
+#include <thread>
LogWorker::LogWorker()
- : m_queue(HIGH_WATERMARK, LOW_WATERMARK)
{
- ACE_Task_Base::activate(THR_NEW_LWP | THR_JOINABLE | THR_INHERIT_SCHED, 1);
+ _cancelationToken = false;
+ _workerThread = std::thread(&LogWorker::WorkerThread, this);
}
LogWorker::~LogWorker()
{
- m_queue.deactivate();
- wait();
+ _cancelationToken = true;
+
+ _queue.Cancel();
+
+ _workerThread.join();
}
-int LogWorker::enqueue(LogOperation* op)
+void LogWorker::Enqueue(LogOperation* op)
{
- return m_queue.enqueue(op);
+ return _queue.Push(op);
}
-int LogWorker::svc()
+void LogWorker::WorkerThread()
{
while (1)
{
- LogOperation* request;
- if (m_queue.dequeue(request) == -1)
- break;
+ LogOperation* operation = nullptr;
+
+ _queue.WaitAndPop(operation);
- request->call();
- delete request;
- }
+ if (_cancelationToken)
+ return;
- return 0;
+ operation->call();
+
+ delete operation;
+ }
}
diff --git a/src/server/shared/Logging/LogWorker.h b/src/server/shared/Logging/LogWorker.h
index 25a57842e08..b2680b12c34 100644
--- a/src/server/shared/Logging/LogWorker.h
+++ b/src/server/shared/Logging/LogWorker.h
@@ -18,30 +18,29 @@
#ifndef LOGWORKER_H
#define LOGWORKER_H
-#include "LogOperation.h"
+#include <atomic>
+#include <thread>
-#include <ace/Task.h>
-#include <ace/Activation_Queue.h>
+#include "LogOperation.h"
+#include "ProducerConsumerQueue.h"
-class LogWorker: protected ACE_Task_Base
+class LogWorker
{
public:
LogWorker();
~LogWorker();
- typedef ACE_Message_Queue_Ex<LogOperation, ACE_MT_SYNCH> LogMessageQueueType;
+ void Enqueue(LogOperation *op);
- enum
- {
- HIGH_WATERMARK = 8 * 1024 * 1024,
- LOW_WATERMARK = 8 * 1024 * 1024
- };
+ private:
+ ProducerConsumerQueue<LogOperation*> _queue;
- int enqueue(LogOperation *op);
+ void WorkerThread();
+ std::thread _workerThread;
- private:
- virtual int svc();
- LogMessageQueueType m_queue;
+ std::atomic_bool _cancelationToken;
};
+
+
#endif