From 2a38ba02dc814e4c96977a661aff2b9e0a3e8e3f Mon Sep 17 00:00:00 2001 From: lyn1001 Date: Mon, 8 Apr 2024 10:33:36 +0800 Subject: [PATCH] fix daemon error on shutdown --- 0001-daemon-Don-t-error-on-shutdown.patch | 121 ++++++++++++++++++++++ gdm.spec | 6 +- 2 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 0001-daemon-Don-t-error-on-shutdown.patch diff --git a/0001-daemon-Don-t-error-on-shutdown.patch b/0001-daemon-Don-t-error-on-shutdown.patch new file mode 100644 index 0000000..32b2b15 --- /dev/null +++ b/0001-daemon-Don-t-error-on-shutdown.patch @@ -0,0 +1,121 @@ +From 9791ab077c5ada6ded2f9d9e5553475ba3428530 Mon Sep 17 00:00:00 2001 +From: lyn1001 +Date: Mon, 8 Apr 2024 13:22:31 +0800 +Subject: [PATCH] daemon Don't error on shutdown + + +diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c +index 46d5a77..c785a6a 100644 +--- a/daemon/gdm-display.c ++++ b/daemon/gdm-display.c +@@ -93,6 +93,7 @@ typedef struct _GdmDisplayPrivate + guint have_existing_user_accounts : 1; + guint doing_initial_setup : 1; + guint session_registered : 1; ++ guint shutting_down : 1; + + GStrv supported_session_types; + } GdmDisplayPrivate; +@@ -119,6 +120,7 @@ enum { + PROP_DOING_INITIAL_SETUP, + PROP_SESSION_REGISTERED, + PROP_SUPPORTED_SESSION_TYPES, ++ PROP_SHUTTING_DOWN, + }; + + static void gdm_display_class_init (GdmDisplayClass *klass); +@@ -691,8 +693,7 @@ gdm_display_unmanage (GdmDisplay *self) + g_object_unref (priv->access_file); + priv->access_file = NULL; + } +- +- if (!priv->session_registered) { ++ if (!priv->session_registered && !priv->shutting_down) { + g_warning ("GdmDisplay: Session never registered, failing"); + _gdm_display_set_status (self, GDM_DISPLAY_FAILED); + } else { +@@ -878,6 +879,16 @@ _gdm_display_set_session_registered (GdmDisplay *self, + priv->session_registered = registered; + } + ++static void ++_gdm_display_set_shutting_down (GdmDisplay *self, ++ gboolean shutting_down) ++{ ++ GdmDisplayPrivate *priv; ++ ++ priv = gdm_display_get_instance_private (self); ++ priv->shutting_down = shutting_down; ++} ++ + static void + _gdm_display_set_launch_environment (GdmDisplay *self, + GdmLaunchEnvironment *launch_environment) +@@ -989,6 +1000,9 @@ gdm_display_set_property (GObject *object, + case PROP_SUPPORTED_SESSION_TYPES: + _gdm_display_set_supported_session_types (self, g_value_get_boxed (value)); + break; ++ case PROP_SHUTTING_DOWN: ++ _gdm_display_set_shutting_down (self, g_value_get_boolean (value)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -1070,6 +1084,9 @@ gdm_display_get_property (GObject *object, + case PROP_SUPPORTED_SESSION_TYPES: + g_value_set_boxed (value, priv->supported_session_types); + break; ++ case PROP_SHUTTING_DOWN: ++ g_value_set_boolean (value, priv->shutting_down); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -1424,6 +1441,13 @@ gdm_display_class_init (GdmDisplayClass *klass) + "supported session types", + G_TYPE_STRV, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); ++ ++ g_object_class_install_property (object_class, ++ PROP_SHUTTING_DOWN, ++ g_param_spec_boolean ("shutting-down", ++ NULL, NULL, ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + } + + static void +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index cc61efc..072ae97 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -2746,11 +2746,14 @@ unexport_display (const char *id, + } + + static void +-finish_display (const char *id, +- GdmDisplay *display, +- GdmManager *manager) ++shut_down_display (const char *id, ++ GdmDisplay *display, ++ GdmManager *manager) + { + gdm_display_stop_greeter_session (display); ++ ++ g_object_set (G_OBJECT (display), "shutting-down", TRUE, NULL); ++ + if (gdm_display_get_status (display) == GDM_DISPLAY_MANAGED) + gdm_display_unmanage (display); + gdm_display_finish (display); +@@ -2802,7 +2805,7 @@ gdm_manager_dispose (GObject *object) + } + + gdm_display_store_foreach (manager->priv->display_store, +- (GdmDisplayStoreFunc) finish_display, ++ (GdmDisplayStoreFunc) shut_down_display, + manager); + + gdm_display_store_clear (manager->priv->display_store); +-- +2.43.0 + diff --git a/gdm.spec b/gdm.spec index 0c33556..b6857ba 100644 --- a/gdm.spec +++ b/gdm.spec @@ -9,7 +9,7 @@ Name: gdm Epoch: 1 Version: 43.0 -Release: 2 +Release: 3 Summary: The GNOME Display Manager License: GPLv2+ URL: https://wiki.gnome.org/Projects/GDM @@ -19,6 +19,7 @@ Source5: default.pa-for-gdm Patch0: 0001-Honor-initial-setup-being-disabled-by-distro-install.patch Patch1: 0001-data-add-system-dconf-databases-to-gdm-profile.patch +Patch2: 0001-daemon-Don-t-error-on-shutdown.patch BuildRequires: accountsservice-devel BuildRequires: audit-libs-devel >= %{libauditver} @@ -279,6 +280,9 @@ fi %{_libdir}/pkgconfig/gdm-pam-extensions.pc %changelog +* Mon Apr 8 2024 liyanan - 1:43.0-3 +- fix daemon error on shutdown + * Wed Mar 13 2024 panchenbo - 1:43.0-2 - modify openEuler to %{_vendor} -- Gitee