[Libreoffice-commits] online.git: loolwsd/Admin.cpp loolwsd/LOOLWSD.cpp loolwsd/Util.cpp loolwsd/Util.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Nov 14 05:33:38 UTC 2016
loolwsd/Admin.cpp | 8 +++++++-
loolwsd/LOOLWSD.cpp | 10 +++++-----
loolwsd/Util.cpp | 1 +
loolwsd/Util.hpp | 3 +++
4 files changed, 16 insertions(+), 6 deletions(-)
New commits:
commit d02f677ffff8be1e23fa30946e806db08c8274da
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun Nov 13 23:55:18 2016 -0500
loolwsd: support shutdown admin command
Change-Id: Ib87ad2c289d59734c7a7a12e821de89e61c05079
Reviewed-on: https://gerrit.libreoffice.org/30831
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/Admin.cpp b/loolwsd/Admin.cpp
index 560acbe..dc2aa9d 100644
--- a/loolwsd/Admin.cpp
+++ b/loolwsd/Admin.cpp
@@ -91,7 +91,7 @@ bool AdminRequestHandler::adminCommandHandler(const std::vector<char>& payload)
tokens[0] == "active_users_count" ||
tokens[0] == "active_docs_count" ||
tokens[0] == "mem_stats" ||
- tokens[0] == "cpu_stats" )
+ tokens[0] == "cpu_stats")
{
const std::string result = model.query(tokens[0]);
if (!result.empty())
@@ -144,6 +144,12 @@ bool AdminRequestHandler::adminCommandHandler(const std::vector<char>& payload)
std::string responseFrame = oss.str();
sendTextFrame(responseFrame);
}
+ else if (tokens[0] == "shutdown")
+ {
+ LOG_INF("Shutdown requested by admin.");
+ ShutdownFlag = true;
+ return false;
+ }
else if (tokens[0] == "set" && tokens.count() > 1)
{
for (unsigned i = 1; i < tokens.count(); i++)
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 91329d6..4bd22bb 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -884,7 +884,7 @@ private:
return session->handleInput(payload.data(), payload.size());
},
[&session]() { session->closeFrame(); },
- []() { return !!TerminationFlag; });
+ []() { return TerminationFlag || ShutdownFlag; });
// Connection terminated. Destroy session.
LOG_DBG("Client session [" << id << "] terminated. Cleaning up.");
@@ -1966,7 +1966,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
time_t last30SecCheck = time(nullptr);
int status = 0;
- while (!TerminationFlag)
+ while (!TerminationFlag && !ShutdownFlag)
{
UnitWSD::get().invokeTest();
if (TerminationFlag)
@@ -2073,11 +2073,11 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
#endif
}
- // stop the service, no more request
+ // Stop the listening to new connections
+ // and wait until sockets close.
+ LOG_INF("Stopping server socket listening.");
srv.stop();
srv2.stop();
-
- // close all websockets
threadPool.joinAll();
// Terminate child processes
diff --git a/loolwsd/Util.cpp b/loolwsd/Util.cpp
index deb2819..2bc780c 100644
--- a/loolwsd/Util.cpp
+++ b/loolwsd/Util.cpp
@@ -51,6 +51,7 @@
#include "Util.hpp"
std::atomic<bool> TerminationFlag(false);
+std::atomic<bool> ShutdownFlag(false);
std::mutex SigHandlerTrap;
namespace Util
diff --git a/loolwsd/Util.hpp b/loolwsd/Util.hpp
index 2303a65..792835c 100644
--- a/loolwsd/Util.hpp
+++ b/loolwsd/Util.hpp
@@ -30,6 +30,9 @@
/// Flag to stop pump loops.
extern std::atomic<bool> TerminationFlag;
+/// Flag to shutdown the server.
+extern std::atomic<bool> ShutdownFlag;
+
/// Mutex to trap signal handler, if any,
/// and prevent _Exit while collecting backtrace.
extern std::mutex SigHandlerTrap;
More information about the Libreoffice-commits
mailing list