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/types.h>
|
||||||
#include <sys/wait.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_NAME "dev.iohub.diya.SessionManager"
|
||||||
#define DBUS_SERVER_PATH "/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)
|
if (self->login_session_pid > 0)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
pid_t pid = waitpid(self->login_session_pid, &status, WNOHANG);
|
pid_t pid = waitpid(self->login_session_pid, &status, 0);
|
||||||
if(pid < 0)
|
if(pid <= 0)
|
||||||
{
|
{
|
||||||
g_warning("start_user_session: login session is still running or waitpid error: %s. Force kill it", strerror(errno));
|
g_warning("start_user_session: login session is still running or waitpid error: %s. Force kill it", strerror(errno));
|
||||||
// try to kill it
|
// try to kill it
|
||||||
(void)kill(self->login_session_pid, SIGKILL);
|
(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;
|
self->login_session_pid = 0;
|
||||||
}
|
}
|
||||||
if(self->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));
|
g_critical("session waitpid error: %s", strerror(errno));
|
||||||
// try to kill it
|
// try to kill it
|
||||||
(void)kill(self->session_pid, SIGKILL);
|
(void)kill(self->session_pid, SIGKILL);
|
||||||
|
(void)waitpid(self->session_pid, &status, 0);
|
||||||
self->session_pid = -1;
|
self->session_pid = -1;
|
||||||
}
|
}
|
||||||
if(pid == 0)
|
if(pid == 0)
|
||||||
@ -515,6 +517,7 @@ static gboolean processes_monitor(gpointer user_data)
|
|||||||
g_critical("login session waitpid error: %s", strerror(errno));
|
g_critical("login session waitpid error: %s", strerror(errno));
|
||||||
// try to kill it
|
// try to kill it
|
||||||
(void)kill(self->login_session_pid, SIGKILL);
|
(void)kill(self->login_session_pid, SIGKILL);
|
||||||
|
(void)waitpid(self->login_session_pid, &status, 0);
|
||||||
self->login_session_pid = -1;
|
self->login_session_pid = -1;
|
||||||
}
|
}
|
||||||
if(pid == 0)
|
if(pid == 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user