From ede263154972bd3e8fd938b4da93e56c6319b9f6 Mon Sep 17 00:00:00 2001 From: winnerym100 Date: Wed, 23 Apr 2025 13:34:35 +0800 Subject: [PATCH] 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 42e8fe264..dec35d8dd 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); + } } } }