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 @@ -123,17 +123,36 @@ entrance_xserver_init(Entrance_X_Cb start, const char *dname) return pid; } +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