loolwsd/LOOLWSD.cpp | 18 +++++++++++++++--- loolwsd/LOOLWSD.hpp | 2 ++ loolwsd/MasterProcessSession.cpp | 6 +++++- 3 files changed, 22 insertions(+), 4 deletions(-)
New commits: commit 2d375f3eba9695e2f0debefbf283553e9fd825e8 Author: Henry Castro <hcas...@collabora.com> Date: Sun Dec 13 13:28:01 2015 -0500 loolwsd: FIFO Change-Id: I4694e45ab8006e8287011000bc5e2797bc9ecd48 Reviewed-on: https://gerrit.libreoffice.org/20898 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index b89fb9c..8bdc377 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -101,7 +101,7 @@ DEALINGS IN THE SOFTWARE. #include <Poco/TemporaryFile.h> #include <Poco/StreamCopier.h> #include <Poco/URI.h> - +#include <Poco/Environment.h> #include "LOOLProtocol.hpp" #include "LOOLSession.hpp" @@ -579,6 +579,7 @@ private: int LOOLWSD::portNumber = DEFAULT_CLIENT_PORT_NUMBER; int LOOLWSD::timeoutCounter = 0; +int LOOLWSD::writerBroker = -1; Poco::UInt64 LOOLWSD::_childId = 0; std::string LOOLWSD::cache = LOOLWSD_CACHEDIR; std::string LOOLWSD::sysTemplate; @@ -601,6 +602,7 @@ int LOOLWSD::uid = 0; const std::string LOOLWSD::CHILD_URI = "/loolws/child/"; const std::string LOOLWSD::PIDLOG = "/tmp/loolwsd.pid"; const std::string LOOLWSD::LOKIT_PIDLOG = "/tmp/lokit.pid"; +const std::string LOOLWSD::FIFO_FILE = "/tmp/loolwsdfifo"; LOOLWSD::LOOLWSD() { @@ -1150,7 +1152,7 @@ void LOOLWSD::desktopMain() } if ( WCOREDUMP(status) ) - std::cout << Util::logPrefix() << "The child produced a core dump." << std::endl; + std::cout << Util::logPrefix() << "The child process [" << pid << "] produced a core dump." << std::endl; if ( WIFSTOPPED(status) ) std::cout << Util::logPrefix() << "The child process was stopped by delivery of a signal." << std::endl; @@ -1222,6 +1224,9 @@ void LOOLWSD::startupDesktop(int nDesktops) int LOOLWSD::main(const std::vector<std::string>& /*args*/) { + Poco::Environment::set("LD_BIND_NOW", "1"); + Poco::Environment::set("LOK_VIEW_CALLBACK", "1"); + int status; #ifdef __linux char *locale = setlocale(LC_ALL, NULL); @@ -1233,7 +1238,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) if (access(cache.c_str(), R_OK | W_OK | X_OK) != 0) { - std::cout << "Unable to access " << cache << + std::cout << Util::logPrefix() << "Unable to access " << cache << ", please make sure it exists, and has write permission for this user." << std::endl; return Application::EXIT_UNAVAILABLE; } @@ -1266,6 +1271,12 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) filePID << Process::id(); } + if (!File(FIFO_FILE).exists() && mkfifo(FIFO_FILE.c_str(), 0666) == -1) + { + std::cout << Util::logPrefix() << "Fail to create pipe FIFO" << std::endl; + return Application::EXIT_UNAVAILABLE; + } + _namedMutexLOOL.lock(); startupDesktop(1); @@ -1362,6 +1373,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) // wait broker process finish waitpid(-1, &status, WUNTRACED); + std::cout << Util::logPrefix() << "loolwsd finished OK!" << std::endl; return Application::EXIT_OK; } diff --git a/loolwsd/LOOLWSD.hpp b/loolwsd/LOOLWSD.hpp index 62e4c32..9771e4c 100644 --- a/loolwsd/LOOLWSD.hpp +++ b/loolwsd/LOOLWSD.hpp @@ -33,6 +33,7 @@ public: static int portNumber; static int timeoutCounter; static int _numPreSpawnedChildren; + static int writerBroker; static bool doTest; static bool volatile isShutDown; static std::string cache; @@ -53,6 +54,7 @@ public: static const int POLL_TIMEOUT = 1000000; static const std::string CHILD_URI; static const std::string PIDLOG; + static const std::string FIFO_FILE; static const std::string LOKIT_PIDLOG; protected: diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp index ac39c92..21f8caf 100644 --- a/loolwsd/MasterProcessSession.cpp +++ b/loolwsd/MasterProcessSession.cpp @@ -373,6 +373,10 @@ bool MasterProcessSession::loadDocument(const char* /*buffer*/, int /*length*/, try { URI aUri(_docURL); + + // request new URL session + std::string aMessage = "request " + std::to_string(Thread::currentTid()) + " " + _docURL + "\r\n"; + Util::writeFIFO(LOOLWSD::writerBroker, aMessage.c_str(), aMessage.length()); } catch(Poco::SyntaxException&) { @@ -598,7 +602,7 @@ void MasterProcessSession::dispatchChild() #ifdef __linux Application::instance().logger().information(Util::logPrefix() + "Linking " + aSrcFile.toString() + " to " + aDstFile.toString()); - if (link(aSrcFile.toString().c_str(), aDstFile.toString().c_str()) == -1) + if (!File(aDstFile).exists() && link(aSrcFile.toString().c_str(), aDstFile.toString().c_str()) == -1) { // Failed Application::instance().logger().error( Util::logPrefix() + _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits