loolwsd/LOOLSession.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
New commits: commit c9bb1efb34d04e834a023600c6970d86d0dac8b1 Author: Jan Holesovsky <[email protected]> Date: Sat Jan 23 01:40:26 2016 +0100 loolwsd: Don't wait for the child infinitely. Re-try, and then give up if we don't get an answer. diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp index 9da15b0..c25f4c3 100644 --- a/loolwsd/LOOLSession.cpp +++ b/loolwsd/LOOLSession.cpp @@ -696,8 +696,22 @@ void MasterProcessSession::dispatchChild() if (_availableChildSessions.size() == 0) { std::cout << Util::logPrefix() << "waiting for a child session to become available" << std::endl; - _availableChildSessionCV.wait(lock, [] { return _availableChildSessions.size() > 0; }); - std::cout << Util::logPrefix() << "waiting done" << std::endl; + if (_availableChildSessionCV.wait_for(lock, std::chrono::minutes(5), [] { return _availableChildSessions.size() > 0; })) + std::cout << Util::logPrefix() << "waiting done" << std::endl; + else + { + std::cout << Util::logPrefix() << "waiting for the child session timed out, last try to start a new session" << std::endl; + LOOLWSD::_namedMutexLOOL.lock(); + ++reinterpret_cast<size_t*>(LOOLWSD::_sharedForkChild.begin())[0]; + LOOLWSD::_namedMutexLOOL.unlock(); + + if (!_availableChildSessionCV.wait_for(lock, std::chrono::minutes(5), [] { return _availableChildSessions.size() > 0; })) + { + std::cout << Util::logPrefix() << "real trouble starting new session, giving up" << std::endl; + lock.unlock(); + return; + } + } } childSession = *(_availableChildSessions.begin()); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
