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

Reply via email to