diff --git a/src/manager.c b/src/manager.c index b832df7..37f541d 100644 --- a/src/manager.c +++ b/src/manager.c @@ -8,7 +8,7 @@ #include #include -#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)