loolwsd/LOOLBroker.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-)
New commits: commit 1cbeabb18f94cea85740a7786b0f75964cec935c Author: Henry Castro <hcas...@collabora.com> Date: Sun Sep 27 17:14:00 2015 -0400 loolwsd: crate writer FIFO pipe to send message to childs diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp index ee04ed8..90f58ee 100644 --- a/loolwsd/LOOLBroker.cpp +++ b/loolwsd/LOOLBroker.cpp @@ -57,6 +57,13 @@ using Poco::Process; using Poco::Thread; using Poco::ProcessHandle; +const std::string BROKER_SUFIX = ".fifo"; +const std::string BROKER_PREFIX = "/tmp/lokit"; + +static unsigned int childCounter = 0; + +static std::map<Poco::Process::PID, Poco::UInt64> _childProcesses; + namespace { ThreadLocal<std::string> sourceForLinkOrCopy; @@ -218,8 +225,6 @@ namespace } } -static std::map<Poco::Process::PID, Poco::UInt64> _childProcesses; - /// Initializes LibreOfficeKit for cross-fork re-use. static bool globalPreinit(const std::string &loSubPath) { @@ -247,6 +252,8 @@ static bool globalPreinit(const std::string &loSubPath) static int createLibreOfficeKit(bool sharePages, std::string loSubPath, Poco::UInt64 childID) { Poco::UInt64 child; + int nFIFOWriter = -1; + if (sharePages) { Poco::UInt64 pid; @@ -266,18 +273,29 @@ static int createLibreOfficeKit(bool sharePages, std::string loSubPath, Poco::UI else { Process::Args args; - std::string pipe = ""; + std::string executable = "loolkit"; + std::string pipe = BROKER_PREFIX + std::to_string(childCounter++) + BROKER_SUFIX; + + if (mkfifo(pipe.c_str(), 0666) < 0) + { + std::cout << Util::logPrefix() << "mkfifo :" << strerror(errno) << std::endl; + return -1; + } args.push_back("--losubpath=" + loSubPath); args.push_back("--child=" + std::to_string(childID)); args.push_back("--pipe=" + pipe); - std::string executable = "loolkit"; - std::cout << Util::logPrefix() + "Launching LibreOfficeKit: " + executable + " " + Poco::cat(std::string(" "), args.begin(), args.end()) << std::endl; ProcessHandle procChild = Process::launch(executable, args); child = procChild.id(); + + if ( ( nFIFOWriter = open(pipe.c_str(), O_WRONLY) ) < 0 ) + { + std::cout << Util::logPrefix() << "open: " << strerror(errno) << std::endl; + return -1; + } } _childProcesses[child] = child; return 0; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits