From e099e67cbb35d16df47934b27ce607f91e6cc099 Mon Sep 17 00:00:00 2001 From: yangmin Date: Fri, 3 Nov 2023 13:39:29 +0800 Subject: [PATCH 1/2] fix(login session): Fixed User desktop login failure after the .Xauthority file's authname is modified MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Description: 修复用户的.Xauthority文件的authname被修改后无法登录用户桌面问题 Log: null --- src/x-authority.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/x-authority.c b/src/x-authority.c index a312d6df..fc27e1b4 100644 --- a/src/x-authority.c +++ b/src/x-authority.c @@ -294,7 +294,8 @@ x_authority_write (XAuthority *auth, XAuthWriteMode mode, const gchar *filename, if (!matched && priv->family == a_priv->family && address_matches && - strcmp (priv->number, a_priv->number) == 0) + strcmp (priv->number, a_priv->number) == 0 && + strcmp (priv->authorization_name, a_priv->authorization_name) == 0) { matched = TRUE; if (mode == XAUTH_WRITE_MODE_REMOVE) From d68259dc9822aa49d0d4eb96cc5bc1bfe12bb188 Mon Sep 17 00:00:00 2001 From: winnerym100 Date: Wed, 23 Apr 2025 13:34:35 +0800 Subject: [PATCH 2/2] fix(seat init): Fix the issue of repeated initialization of seat0 caused by signal_cb callback probability executing in asynchronous threads Description: Fix the issue of repeated initialization of seat0 caused by signal_cb callback probability executing in asynchronous threads Log: null --- src/login1.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/login1.c b/src/login1.c index 42e8fe26..dec35d8d 100644 --- a/src/login1.c +++ b/src/login1.c @@ -223,12 +223,15 @@ signal_cb (GDBusConnection *connection, { const gchar *id, *path; g_variant_get (parameters, "(&s&o)", &id, &path); - - Login1Seat *seat = login1_service_get_seat (service, id); - if (!seat) - { - seat = add_seat (service, id, path); - g_signal_emit (service, service_signals[SEAT_ADDED], 0, seat); + // Fix the issue of repeated initialization of seat0 caused by signal_cb callback + // probability executing in asynchronous threads + if (priv->connected) { + Login1Seat *seat = login1_service_get_seat (service, id); + if (!seat) + { + seat = add_seat (service, id, path); + g_signal_emit (service, service_signals[SEAT_ADDED], 0, seat); + } } } else if (strcmp (signal_name, "SeatRemoved") == 0) @@ -236,11 +239,13 @@ signal_cb (GDBusConnection *connection, const gchar *id, *path; g_variant_get (parameters, "(&s&o)", &id, &path); - g_autoptr(Login1Seat) seat = login1_service_get_seat (service, id); - if (seat) - { - priv->seats = g_list_remove (priv->seats, seat); - g_signal_emit (service, service_signals[SEAT_REMOVED], 0, seat); + if (priv->connected) { + g_autoptr(Login1Seat) seat = login1_service_get_seat (service, id); + if (seat) + { + priv->seats = g_list_remove (priv->seats, seat); + g_signal_emit (service, service_signals[SEAT_REMOVED], 0, seat); + } } } }