loolwsd/LOOLBroker.cpp | 10 +++++++--- loolwsd/LOOLWSD.hpp | 2 +- loolwsd/MasterProcessSession.cpp | 11 ++++++++--- 3 files changed, 16 insertions(+), 7 deletions(-)
New commits: commit 5ade3f91670464ca5828c39c38067c25408f63da Author: Henry Castro <[email protected]> Date: Tue Aug 4 21:49:33 2015 -0400 loolwsd: fix child fork when debugging one child. diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp index 13c380d..478931b 100644 --- a/loolwsd/LOOLBroker.cpp +++ b/loolwsd/LOOLBroker.cpp @@ -21,6 +21,7 @@ #include <Poco/Process.h> #include <Poco/Thread.h> #include <Poco/SharedMemory.h> +#include <Poco/NamedMutex.h> #include "Util.hpp" @@ -239,6 +240,7 @@ static void startupLibreOfficeKit(int nLOKits, std::string loSubPath, Poco::UInt } static int timeoutCounter = 0; +Poco::NamedMutex _namedMutexLOOL("loolwsd"); // Broker process int main(int argc, char** argv) @@ -435,10 +437,12 @@ int main(int argc, char** argv) else if (pid < 0) std::cout << Util::logPrefix() << "Child error: " << strerror(errno) << std::endl; - if ( _sharedForkChild.begin()[0] ) + if ( _sharedForkChild.begin()[0] > 0 ) { - _sharedForkChild.begin()[0] = 0; - std::cout << Util::logPrefix() << "No availabe child session, fork new one" << std::endl; + _namedMutexLOOL.lock(); + _sharedForkChild.begin()[0] = _sharedForkChild.begin()[0] - 1; + _namedMutexLOOL.unlock(); + std::cout << Util::logPrefix() << "Create child session, fork new one" << std::endl; if (createLibreOfficeKit(loSubPath, _childId) < 0 ) break; } diff --git a/loolwsd/LOOLWSD.hpp b/loolwsd/LOOLWSD.hpp index 2617cff..1ad7187 100644 --- a/loolwsd/LOOLWSD.hpp +++ b/loolwsd/LOOLWSD.hpp @@ -46,6 +46,7 @@ public: static const int MAINTENANCE_INTERVAL = 1; static const std::string CHILD_URI; static const std::string PIDLOG; + static Poco::NamedMutex _namedMutexLOOL; protected: void initialize(Poco::Util::Application& self) override; @@ -64,7 +65,6 @@ private: static int _numPreSpawnedChildren; static std::mutex _rngMutex; static Poco::Random _rng; - static Poco::NamedMutex _namedMutexLOOL; #if ENABLE_DEBUG public: diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp index c0e98d4..8d18cd9 100644 --- a/loolwsd/MasterProcessSession.cpp +++ b/loolwsd/MasterProcessSession.cpp @@ -396,11 +396,16 @@ void MasterProcessSession::dispatchChild() childSession = *(_availableChildSessions.begin()); _availableChildSessions.erase(childSession); - std::cout << Util::logPrefix() << "_availableChildSessions size=" << _availableChildSessions.size() << std::endl; - if (_availableChildSessions.size() == 0) - LOOLWSD::_sharedForkChild.begin()[0] = 1; lock.unlock(); + if (_availableChildSessions.size() == 0) + { + LOOLWSD::_namedMutexLOOL.lock(); + std::cout << Util::logPrefix() << "No available child sessions, queue new child session" << std::endl; + LOOLWSD::_sharedForkChild.begin()[0] = (LOOLWSD::_sharedForkChild.begin()[0] > 0 ? LOOLWSD::_sharedForkChild.begin()[0] + 1 : 1); + LOOLWSD::_namedMutexLOOL.unlock(); + } + // Assume a valid URI URI aUri(_docURL); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
