[Libreoffice-commits] online.git: loolwsd/LOOLKit.cpp loolwsd/LOOLWSD.cpp loolwsd/QueueHandler.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Wed Jan 6 06:25:16 PST 2016
loolwsd/LOOLKit.cpp | 2 -
loolwsd/LOOLWSD.cpp | 66 +++--------------------------------------------
loolwsd/QueueHandler.hpp | 16 ++++++-----
3 files changed, 15 insertions(+), 69 deletions(-)
New commits:
commit f9cfdd902152bde395ce2289b072e19cf1073073
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Wed Jan 6 08:38:21 2016 -0500
loolwsd: reuse QueueHandler
Change-Id: I90dd0cc1457604d85ec82c98af9a457f44968b0d
Reviewed-on: https://gerrit.libreoffice.org/21161
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index c352422..d468739 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -396,7 +396,7 @@ public:
_session->sendTextFrame(hello);
TileQueue queue;
- QueueHandler handler(queue, _session);
+ QueueHandler handler(queue, _session, "kit_queue_" + _session->getId());
Thread queueHandlerThread;
queueHandlerThread.start(handler);
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 259b97e..03dc308 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -108,7 +108,7 @@ DEALINGS IN THE SOFTWARE.
#include "MasterProcessSession.hpp"
#include "ChildProcessSession.hpp"
#include "LOOLWSD.hpp"
-#include "MessageQueue.hpp"
+#include "QueueHandler.hpp"
#include "Util.hpp"
using namespace LOOLProtocol;
@@ -151,58 +151,6 @@ using Poco::NamedMutex;
using Poco::ProcessHandle;
using Poco::URI;
-class QueueHandler: public Runnable
-{
-public:
- QueueHandler(MessageQueue& queue):
- _queue(queue)
- {
- }
-
- void setSession(std::shared_ptr<LOOLSession> session)
- {
- _session = session;
- }
-
- void run() override
- {
- static const std::string thread_name = "wsd_queue";
-#ifdef __linux
- if (prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(thread_name.c_str()), 0, 0, 0) != 0)
- Log::error("Cannot set thread name to " + thread_name + ".");
-#endif
- Log::debug("Thread [" + thread_name + "] started.");
-
- try
- {
- while (true)
- {
- const std::string input = _queue.get();
- if (input == "eof")
- break;
- if (!_session->handleInput(input.c_str(), input.size()))
- break;
- }
- }
- catch (const std::exception& exc)
- {
- Log::error(std::string("Exception: ") + exc.what());
- raise(SIGABRT);
- }
- catch (...)
- {
- Log::error("Unexpected Exception.");
- raise(SIGABRT);
- }
-
- Log::debug("Thread [" + thread_name + "] finished.");
- }
-
-private:
- std::shared_ptr<LOOLSession> _session;
- MessageQueue& _queue;
-};
-
/// Handles the filename part of the convert-to POST request payload.
class ConvertToPartHandler : public Poco::Net::PartHandler
{
@@ -473,11 +421,6 @@ public:
return;
}
- BasicTileQueue queue;
- Thread queueHandlerThread;
- QueueHandler handler(queue);
- Poco::Timespan waitTime(POLL_TIMEOUT);
-
try
{
auto ws = std::make_shared<WebSocket>(request, response);
@@ -488,7 +431,10 @@ public:
// For ToClient sessions, we store incoming messages in a queue and have a separate
// thread that handles them. This is so that we can empty the queue when we get a
// "canceltiles" message.
- handler.setSession(session);
+ BasicTileQueue queue;
+ QueueHandler handler(queue, session, "wsd_queue_" + session->getId());
+
+ Thread queueHandlerThread;
queueHandlerThread.start(handler);
SocketProcessor(ws, response, [&session, &queue](const char* data, const int size, const bool singleLine)
@@ -540,8 +486,6 @@ public:
#endif
Log::debug("Thread [" + thread_name + "] started.");
- Poco::Timespan waitTime(POLL_TIMEOUT);
-
try
{
auto ws = std::make_shared<WebSocket>(request, response);
diff --git a/loolwsd/QueueHandler.hpp b/loolwsd/QueueHandler.hpp
index 5d07b9a..5111382 100644
--- a/loolwsd/QueueHandler.hpp
+++ b/loolwsd/QueueHandler.hpp
@@ -18,20 +18,21 @@
class QueueHandler: public Poco::Runnable
{
public:
- QueueHandler(MessageQueue& queue, const std::shared_ptr<LOOLSession>& session):
+ QueueHandler(MessageQueue& queue, const std::shared_ptr<LOOLSession>& session,
+ const std::string& name):
_queue(queue),
- _session(session)
+ _session(session),
+ _name(name)
{
}
void run() override
{
- static const std::string thread_name = "kit_queue_" + _session->getId();
#ifdef __linux
- if (prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(thread_name.c_str()), 0, 0, 0) != 0)
- Log::error("Cannot set thread name to " + thread_name + ".");
+ if (prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(_name.c_str()), 0, 0, 0) != 0)
+ Log::error("Cannot set thread name to " + _name + ".");
#endif
- Log::debug("Thread [" + thread_name + "] started.");
+ Log::debug("Thread [" + _name + "] started.");
try
{
@@ -55,12 +56,13 @@ public:
raise(SIGABRT);
}
- Log::debug("Thread [" + thread_name + "] finished.");
+ Log::debug("Thread [" + _name + "] finished.");
}
private:
MessageQueue& _queue;
std::shared_ptr<LOOLSession> _session;
+ const std::string _name;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list