Fix race condition when accessing seatd
This commit is contained in:
parent
9673ab67ba
commit
a7ee451f1c
@ -8,7 +8,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
#define PROCESS_MOM_TO 200 // in ms
|
||||
#define PROCESS_MOM_TO 50 // in ms
|
||||
|
||||
#define DBUS_SERVER_NAME "dev.iohub.diya.SessionManager"
|
||||
#define DBUS_SERVER_PATH "/dev/iohub/diya/SessionManager"
|
||||
@ -256,14 +256,15 @@ static void start_user_session(SessionManager *self)
|
||||
if (self->login_session_pid > 0)
|
||||
{
|
||||
int status;
|
||||
pid_t pid = waitpid(self->login_session_pid, &status, WNOHANG);
|
||||
if(pid < 0)
|
||||
pid_t pid = waitpid(self->login_session_pid, &status, 0);
|
||||
if(pid <= 0)
|
||||
{
|
||||
g_warning("start_user_session: login session is still running or waitpid error: %s. Force kill it", strerror(errno));
|
||||
// try to kill it
|
||||
(void)kill(self->login_session_pid, SIGKILL);
|
||||
pid = waitpid(self->login_session_pid, &status, 0);
|
||||
}
|
||||
g_debug("start_user_session: login session is exited");
|
||||
g_debug("start_user_session: login session is exited: %d", pid);
|
||||
self->login_session_pid = 0;
|
||||
}
|
||||
if(self->session_pid > 0)
|
||||
@ -499,6 +500,7 @@ static gboolean processes_monitor(gpointer user_data)
|
||||
g_critical("session waitpid error: %s", strerror(errno));
|
||||
// try to kill it
|
||||
(void)kill(self->session_pid, SIGKILL);
|
||||
(void)waitpid(self->session_pid, &status, 0);
|
||||
self->session_pid = -1;
|
||||
}
|
||||
if(pid == 0)
|
||||
@ -515,6 +517,7 @@ static gboolean processes_monitor(gpointer user_data)
|
||||
g_critical("login session waitpid error: %s", strerror(errno));
|
||||
// try to kill it
|
||||
(void)kill(self->login_session_pid, SIGKILL);
|
||||
(void)waitpid(self->login_session_pid, &status, 0);
|
||||
self->login_session_pid = -1;
|
||||
}
|
||||
if(pid == 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user