yoz pushed a commit to branch master.

http://git.enlightenment.org/misc/entrance.git/commit/?id=60ee7d4596a1cea9d376ea833bda5dd23881cd01

commit 60ee7d4596a1cea9d376ea833bda5dd23881cd01
Author: Michael Bouchaud <[email protected]>
Date:   Tue Sep 23 23:05:46 2014 +0000

    wait for xserver end
---
 src/daemon/entrance.c         |  4 ++--
 src/daemon/entrance_xserver.c | 25 ++++++++++++++++++++++---
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/daemon/entrance.c b/src/daemon/entrance.c
index de43162..1e924ff 100644
--- a/src/daemon/entrance.c
+++ b/src/daemon/entrance.c
@@ -352,6 +352,7 @@ main (int argc, char ** argv)
    if (entrance_user)
      {
         char *quit;
+        entrance_xserver_wait();
         entrance_session_init(dname);
         entrance_session_end(entrance_user);
         entrance_session_shutdown();
@@ -361,8 +362,6 @@ main (int argc, char ** argv)
              unsetenv("ENTRANCE_QUIT");
              PT("Last DE Session quit with error!\n");
           }
-        PT("ending xserver\n");
-        entrance_xserver_end();
         _remove_lock();
         PT("Entrance will quit, bye bye :).\n");
         entrance_close_log();
@@ -466,6 +465,7 @@ main (int argc, char ** argv)
         PT("ending xserver\n");
         kill(pid, SIGTERM);
         entrance_xserver_end();
+        entrance_xserver_wait();
      }
    else
      PT("No session to wait, exiting\n");
diff --git a/src/daemon/entrance_xserver.c b/src/daemon/entrance_xserver.c
index bab3d5c..5af0f01 100644
--- a/src/daemon/entrance_xserver.c
+++ b/src/daemon/entrance_xserver.c
@@ -124,16 +124,35 @@ entrance_xserver_init(Entrance_X_Cb start, const char 
*dname)
 }
 
 void
+entrance_xserver_wait(void)
+{
+   const char *xpid;
+   int pid;
+
+   PT("xserver end");
+   xpid = getenv("ENTRANCE_XPID");
+   if (xpid)
+     {
+        pid = atoi(xpid);
+        while (waitpid(pid, NULL, WUNTRACED | WCONTINUED) > 0)
+          {
+             printf(".");
+             sleep(1);
+          }
+        unsetenv("ENTRANCE_XPID");
+     }
+   printf("\n");
+}
+
+void
 entrance_xserver_end(void)
 {
    const char *xpid;
    PT("xserver end\n");
    xpid = getenv("ENTRANCE_XPID");
-   if (xpid) 
+   if (xpid)
      kill(atoi(xpid), SIGTERM);
 
-   unsetenv("ENTRANCE_XPID");
-   while (waitpid(-1, NULL, WNOHANG) > 0);
 }
 
 void

-- 


Reply via email to