Fix race condition when accessing seatd

This commit is contained in:
DanyLE 2025-03-08 21:00:17 +01:00
parent 9673ab67ba
commit a7ee451f1c

View File

@ -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)