loolwsd/LOOLWSD.cpp | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-)
New commits: commit 061a2bfc3dd2057abdc3b517189d3ee012b9bf46 Author: Henry Castro <hcas...@collabora.com> Date: Thu Jul 16 18:05:28 2015 -0400 loolwsd: rework child monitor status. diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index f6b8457..e5be693 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -1018,25 +1018,42 @@ void LOOLWSD::desktopMain() namedMutexLOOL.unlock(); + /* Pause for a second */ + sleep(1); + while (MasterProcessSession::_childProcesses.size() > 0) { int status; pid_t pid = waitpid(-1, &status, WUNTRACED | WNOHANG); - if (pid < 0) + if (pid > 0) { - if (errno == ECHILD) + if ( MasterProcessSession::_childProcesses.find(pid) != MasterProcessSession::_childProcesses.end() ) { - // We have spawned children, and we think that we still have them running, - // but we don't, huh? Something badly messed up, or just a timing glitch, - // like we are at the moment in the process of spawning new children? - // Sleep or return from the function (i.e. finish the Undertaker thread)? - std::cout << Util::logPrefix() << "No child processes even if we think there should be some!?" << std::endl; - } - } + if ((WIFEXITED(status) || WIFSIGNALED(status) || WTERMSIG(status) ) ) + { + std::cout << Util::logPrefix() << "One of our known child processes died :" << std::to_string(pid) << std::endl; + MasterProcessSession::_childProcesses.erase(pid); + } + + if ( WCOREDUMP(status) ) + std::cout << Util::logPrefix() << "The child 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; - if ((WIFEXITED(status) || WIFSIGNALED(status) || WTERMSIG(status) ) && - MasterProcessSession::_childProcesses.find(pid) != MasterProcessSession::_childProcesses.end()) - std::cout << Util::logPrefix() << "One of our known child processes died" << std::endl; + if ( WSTOPSIG(status) ) + std::cout << Util::logPrefix() << "The child process was stopped." << std::endl; + + if ( WIFCONTINUED(status) ) + std::cout << Util::logPrefix() << "The child process was resumed." << std::endl; + } + else + { + std::cout << Util::logPrefix() << "None of our known child processes died :" << std::to_string(pid) << std::endl; + } + } + else if (pid < 0) + std::cout << Util::logPrefix() << "Child error: " << strerror(errno); if (MasterProcessSession::getAvailableChildSessions() == 0 && MasterProcessSession::getPendingPreSpawnedChildren() == 0 ) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits