wait for xserver end

This commit is contained in:
Michael Bouchaud 2014-09-23 23:05:46 +00:00
parent 46c7cc4214
commit 60ee7d4596
2 changed files with 24 additions and 5 deletions

View File

@ -352,6 +352,7 @@ main (int argc, char ** argv)
if (entrance_user) if (entrance_user)
{ {
char *quit; char *quit;
entrance_xserver_wait();
entrance_session_init(dname); entrance_session_init(dname);
entrance_session_end(entrance_user); entrance_session_end(entrance_user);
entrance_session_shutdown(); entrance_session_shutdown();
@ -361,8 +362,6 @@ main (int argc, char ** argv)
unsetenv("ENTRANCE_QUIT"); unsetenv("ENTRANCE_QUIT");
PT("Last DE Session quit with error!\n"); PT("Last DE Session quit with error!\n");
} }
PT("ending xserver\n");
entrance_xserver_end();
_remove_lock(); _remove_lock();
PT("Entrance will quit, bye bye :).\n"); PT("Entrance will quit, bye bye :).\n");
entrance_close_log(); entrance_close_log();
@ -466,6 +465,7 @@ main (int argc, char ** argv)
PT("ending xserver\n"); PT("ending xserver\n");
kill(pid, SIGTERM); kill(pid, SIGTERM);
entrance_xserver_end(); entrance_xserver_end();
entrance_xserver_wait();
} }
else else
PT("No session to wait, exiting\n"); PT("No session to wait, exiting\n");

View File

@ -123,17 +123,36 @@ entrance_xserver_init(Entrance_X_Cb start, const char *dname)
return pid; 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 void
entrance_xserver_end(void) entrance_xserver_end(void)
{ {
const char *xpid; const char *xpid;
PT("xserver end\n"); PT("xserver end\n");
xpid = getenv("ENTRANCE_XPID"); xpid = getenv("ENTRANCE_XPID");
if (xpid) if (xpid)
kill(atoi(xpid), SIGTERM); kill(atoi(xpid), SIGTERM);
unsetenv("ENTRANCE_XPID");
while (waitpid(-1, NULL, WNOHANG) > 0);
} }
void void