daemon: also wait for the end of the session process
This commit is contained in:
parent
2023bae199
commit
8d688c93a1
|
@ -188,6 +188,14 @@ _entrance_session_run(struct passwd *pwd, const char *cmd, const char *cookie)
|
||||||
execle(pwd->pw_shell, pwd->pw_shell, "--login", "-c", buf, NULL, env);
|
execle(pwd->pw_shell, pwd->pw_shell, "--login", "-c", buf, NULL, env);
|
||||||
PT("The Xsessions are not launched :(");
|
PT("The Xsessions are not launched :(");
|
||||||
}
|
}
|
||||||
|
else if (pid > 0)
|
||||||
|
{
|
||||||
|
entrance_session_pid_set(pid);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERR("Failed to start session");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -217,8 +225,12 @@ entrance_session_close(const Eina_Bool opened)
|
||||||
void
|
void
|
||||||
entrance_session_pid_set(pid_t pid)
|
entrance_session_pid_set(pid_t pid)
|
||||||
{
|
{
|
||||||
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
PT("%s: session pid %d", PACKAGE, pid);
|
PT("%s: session pid %d", PACKAGE, pid);
|
||||||
_session_pid = pid;
|
_session_pid = pid;
|
||||||
|
snprintf(buf, sizeof(buf), "%d", pid);
|
||||||
|
setenv("ENTRANCE_SPID", buf, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pid_t
|
pid_t
|
||||||
|
|
|
@ -33,11 +33,15 @@ main (int argc __UNUSED__, char **argv __UNUSED__)
|
||||||
{
|
{
|
||||||
int status = 0;
|
int status = 0;
|
||||||
char *pid;
|
char *pid;
|
||||||
|
char *sid;
|
||||||
struct sigaction action;
|
struct sigaction action;
|
||||||
|
|
||||||
pid_t rpid;
|
pid_t rpid, spid;
|
||||||
pid = getenv("ENTRANCE_XPID");
|
pid = getenv("ENTRANCE_XPID");
|
||||||
|
sid = getenv("ENTRANCE_SPID");
|
||||||
if (!pid) return -1;
|
if (!pid) return -1;
|
||||||
|
if (!sid) return -1;
|
||||||
|
spid = atoi(sid);
|
||||||
_x_pid = atoi(pid);
|
_x_pid = atoi(pid);
|
||||||
printf("waiting\n");
|
printf("waiting\n");
|
||||||
|
|
||||||
|
@ -53,20 +57,23 @@ main (int argc __UNUSED__, char **argv __UNUSED__)
|
||||||
sigaction(SIGPIPE, &action, NULL);
|
sigaction(SIGPIPE, &action, NULL);
|
||||||
sigaction(SIGALRM, &action, NULL);
|
sigaction(SIGALRM, &action, NULL);
|
||||||
|
|
||||||
while ((rpid = wait(&status)) != _x_pid)
|
while ((rpid = wait(&status)))
|
||||||
{
|
{
|
||||||
if (rpid == -1)
|
if (rpid == -1)
|
||||||
{
|
{
|
||||||
if ((errno == ECHILD) || (errno == EINVAL))
|
if ((errno == ECHILD) || (errno == EINVAL))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else if (rpid == _x_pid || rpid == spid)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_x_pid == rpid)
|
|
||||||
{
|
|
||||||
if (WIFEXITED(status) && WEXITSTATUS(status))
|
if (WIFEXITED(status) && WEXITSTATUS(status))
|
||||||
setenv("ENTRANCE_QUIT", "1", 1);
|
setenv("ENTRANCE_QUIT", "1", 1);
|
||||||
execlp(PACKAGE_SBIN_DIR"/entrance", PACKAGE_SBIN_DIR"/entrance", "--nodaemon", NULL);
|
execlp(PACKAGE_SBIN_DIR"/entrance", PACKAGE_SBIN_DIR"/entrance", "--nodaemon", NULL);
|
||||||
}
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue