[Libreoffice-commits] online.git: wsd/LOOLWSD.cpp wsd/LOOLWSD.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Jan 16 02:15:37 UTC 2017
wsd/LOOLWSD.cpp | 30 ++++++++++++++----------------
wsd/LOOLWSD.hpp | 6 +++++-
2 files changed, 19 insertions(+), 17 deletions(-)
New commits:
commit bccb2fcad69bd562db4e17eb6aba0ad5be417206
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun Jan 15 17:54:55 2017 -0500
wsd: forkit process id is now a static member
Change-Id: I4bb6a419a83ecd30745681848e93629658baa763
Reviewed-on: https://gerrit.libreoffice.org/33136
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 23507ff..ac89bdd 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -1678,6 +1678,7 @@ inline std::string getAdminURI(const Poco::Util::LayeredConfiguration &config)
std::atomic<unsigned> LOOLWSD::NextSessionId;
std::atomic<int> LOOLWSD::ForKitWritePipe(-1);
+std::atomic<int> LOOLWSD::ForKitProcId(-1);
bool LOOLWSD::NoCapsForKit = false;
std::string LOOLWSD::Cache = LOOLWSD_CACHEDIR;
std::string LOOLWSD::SysTemplate;
@@ -2075,7 +2076,7 @@ void LOOLWSD::displayHelp()
helpFormatter.format(std::cout);
}
-Process::PID LOOLWSD::createForKit()
+bool LOOLWSD::createForKit()
{
LOG_INF("Creating new forkit process.");
@@ -2120,17 +2121,17 @@ Process::PID LOOLWSD::createForKit()
// The Pipe dtor closes the fd, so dup it.
ForKitWritePipe = dup(inPipe.writeHandle());
- const auto forkitPid = child.id();
+ ForKitProcId = child.id();
- LOG_INF("Forkit process launched: " << forkitPid);
+ LOG_INF("Forkit process launched: " << ForKitProcId);
// Init the Admin manager
- Admin::instance().setForKitPid(forkitPid);
+ Admin::instance().setForKitPid(ForKitProcId);
// Spawn some children, if necessary.
preForkChildren(newChildrenLock);
- return forkitPid;
+ return (ForKitProcId != -1);
}
int LOOLWSD::main(const std::vector<std::string>& /*args*/)
@@ -2230,8 +2231,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
srv2.start();
// Fire the ForKit process; we are ready to get child connections.
- Process::PID forKitPid = createForKit();
- if (forKitPid < 0)
+ if (!createForKit())
{
LOG_FTL("Failed to spawn loolforkit.");
return Application::EXIT_SOFTWARE;
@@ -2268,10 +2268,10 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
break;
}
- const pid_t pid = waitpid(forKitPid, &status, WUNTRACED | WNOHANG);
+ const pid_t pid = waitpid(ForKitProcId, &status, WUNTRACED | WNOHANG);
if (pid > 0)
{
- if (forKitPid == pid)
+ if (ForKitProcId == pid)
{
if (WIFEXITED(status) || WIFSIGNALED(status))
{
@@ -2288,8 +2288,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
}
// Spawn a new forkit and try to dust it off and resume.
- forKitPid = createForKit();
- if (forKitPid < 0)
+ if (!createForKit())
{
LOG_FTL("Failed to spawn forkit instance. Shutting down.");
SigUtil::requestShutdown();
@@ -2322,8 +2321,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
{
// No child processes.
// Spawn a new forkit and try to dust it off and resume.
- forKitPid = createForKit();
- if (forKitPid < 0)
+ if (!createForKit())
{
LOG_FTL("Failed to spawn forkit instance. Shutting down.");
SigUtil::requestShutdown();
@@ -2390,8 +2388,8 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
DocBrokers.clear();
// Terminate child processes
- LOG_INF("Requesting forkit process " << forKitPid << " to terminate.");
- SigUtil::killChild(forKitPid);
+ LOG_INF("Requesting forkit process " << ForKitProcId << " to terminate.");
+ SigUtil::killChild(ForKitProcId);
// Terminate child processes
LOG_INF("Requesting child processes to terminate.");
@@ -2401,7 +2399,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
}
// Wait for forkit process finish.
- waitpid(forKitPid, &status, WUNTRACED);
+ waitpid(ForKitProcId, &status, WUNTRACED);
close(ForKitWritePipe);
// In case forkit didn't cleanup properly, don't leave jails behind.
diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp
index 7728efa..f802981 100644
--- a/wsd/LOOLWSD.hpp
+++ b/wsd/LOOLWSD.hpp
@@ -37,6 +37,7 @@ public:
static unsigned int NumPreSpawnedChildren;
static bool NoCapsForKit;
static std::atomic<int> ForKitWritePipe;
+ static std::atomic<int> ForKitProcId;
static std::string Cache;
static std::string SysTemplate;
static std::string LoTemplate;
@@ -68,6 +69,10 @@ public:
static void dumpOutgoingTrace(const std::string& id, const std::string& sessionId, const std::string& data);
+ /// Creates a new instance of Forkit.
+ /// Return true when successfull.
+ static bool createForKit();
+
protected:
void initialize(Poco::Util::Application& self) override;
void defineOptions(Poco::Util::OptionSet& options) override;
@@ -80,7 +85,6 @@ private:
void initializeSSL();
void displayHelp();
- static Poco::Process::PID createForKit();
class ConfigValueGetter
{
More information about the Libreoffice-commits
mailing list