From 3567a49f79d2dbf828b723ab54982fa6c7ea1c80 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Oct 2011 23:14:30 +0000 Subject: Tue Oct 4 23:14:30 UTC 2011 --- extra/gnome-settings-daemon/PKGBUILD | 11 +- extra/gnome-settings-daemon/fix_color_crash.patch | 186 ++++++++++++++++++++++ 2 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 extra/gnome-settings-daemon/fix_color_crash.patch (limited to 'extra/gnome-settings-daemon') diff --git a/extra/gnome-settings-daemon/PKGBUILD b/extra/gnome-settings-daemon/PKGBUILD index ab9dbadde..0132134cd 100644 --- a/extra/gnome-settings-daemon/PKGBUILD +++ b/extra/gnome-settings-daemon/PKGBUILD @@ -1,9 +1,9 @@ -# $Id: PKGBUILD 139319 2011-10-01 18:58:22Z ibiru $ +# $Id: PKGBUILD 139631 2011-10-03 21:04:24Z ibiru $ # Maintainer: Jan de Groot pkgname=gnome-settings-daemon pkgver=3.2.0 -pkgrel=1 +pkgrel=2 pkgdesc="The GNOME Settings daemon" arch=('i686' 'x86_64') license=('GPL') @@ -15,11 +15,14 @@ url="http://www.gnome.org" groups=('gnome') replaces=(gnome-settings-daemon-pulse) conflicts=(gnome-settings-daemon-pulse) -source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz) -sha256sums=('a85242ce60b9c9bb3fbad124ee06430a408f39fa31d2d4ea29dc179db724447b') +source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz +fix_color_crash.patch) +sha256sums=('a85242ce60b9c9bb3fbad124ee06430a408f39fa31d2d4ea29dc179db724447b' + 'b249d21702d4cf9a3a8dc177ba17c00d33e8e742e548811552d79ddeff1e91e3') build() { cd "$srcdir/$pkgname-$pkgver" + patch -Np1 -i "$srcdir/fix_color_crash.patch" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ --libexecdir=/usr/lib/gnome-settings-daemon --disable-static --enable-pulse \ --with-pnpids=/usr/share/libgnome-desktop-3.0/pnp.ids diff --git a/extra/gnome-settings-daemon/fix_color_crash.patch b/extra/gnome-settings-daemon/fix_color_crash.patch new file mode 100644 index 000000000..24602100f --- /dev/null +++ b/extra/gnome-settings-daemon/fix_color_crash.patch @@ -0,0 +1,186 @@ +From fd4c0057b8e3f72b30acb6f1c82688e29b31c0c0 Mon Sep 17 00:00:00 2001 +From: Richard Hughes +Date: Mon, 03 Oct 2011 08:52:06 +0000 +Subject: color: Fix a crash if ~/.local is deleted at runtime + +Resolves https://bugzilla.gnome.org/show_bug.cgi?id=660664 +--- +diff --git a/plugins/color/gcm-profile-store.c b/plugins/color/gcm-profile-store.c +index d325162..3dde406 100644 +--- a/plugins/color/gcm-profile-store.c ++++ b/plugins/color/gcm-profile-store.c +@@ -254,6 +254,8 @@ gcm_profile_store_process_child (GcmProfileStore *profile_store, + + /* check we're not in a loop */ + helper = gcm_profile_store_find_directory (profile_store, path); ++ if (helper == NULL) ++ goto out; + if (helper->depth > GCM_PROFILE_STORE_MAX_RECURSION_LEVELS) { + g_warning ("recursing more than %i levels deep is insane", + GCM_PROFILE_STORE_MAX_RECURSION_LEVELS); +-- +cgit v0.9.0.2 +From e3313eb16fd2cb25ab3fbc010837b910e525acf6 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Mon, 03 Oct 2011 10:02:56 +0000 +Subject: color: Simplify gcm_profile_store_mkdir_with_parents() + +No need to check for the path existing, +g_file_make_directory_with_parents() will do that for us. +--- +(limited to 'plugins/color/gcm-profile-store.c') + +diff --git a/plugins/color/gcm-profile-store.c b/plugins/color/gcm-profile-store.c +index 3dde406..d705604 100644 +--- a/plugins/color/gcm-profile-store.c ++++ b/plugins/color/gcm-profile-store.c +@@ -419,19 +419,12 @@ static gboolean + gcm_profile_store_mkdir_with_parents (const gchar *filename, GError **error) + { + gboolean ret; +- GFile *file = NULL; + + /* ensure destination exists */ +- ret = g_file_test (filename, G_FILE_TEST_EXISTS); +- if (!ret) { +- file = g_file_new_for_path (filename); +- ret = g_file_make_directory_with_parents (file, NULL, error); +- if (!ret) +- goto out; +- } +-out: +- if (file != NULL) +- g_object_unref (file); ++ file = g_file_new_for_path (filename); ++ ret = g_file_make_directory_with_parents (file, NULL, error); ++ g_object_unref (file); ++ + return ret; + } + +-- +cgit v0.9.0.2 +From a711ba99fd5a9bc7bf79dcdc763deed39440eb86 Mon Sep 17 00:00:00 2001 +From: Richard Hughes +Date: Mon, 03 Oct 2011 10:38:36 +0000 +Subject: Make commit e3313eb16fd2cb25ab3fbc010837b910e525acf6 actually compile + +--- +(limited to 'plugins/color/gcm-profile-store.c') + +diff --git a/plugins/color/gcm-profile-store.c b/plugins/color/gcm-profile-store.c +index d705604..0b3cfa0 100644 +--- a/plugins/color/gcm-profile-store.c ++++ b/plugins/color/gcm-profile-store.c +@@ -419,6 +419,7 @@ static gboolean + gcm_profile_store_mkdir_with_parents (const gchar *filename, GError **error) + { + gboolean ret; ++ GFile *file; + + /* ensure destination exists */ + file = g_file_new_for_path (filename); +-- +cgit v0.9.0.2 +From 42fa1af884fda1590bc7af0f78e4fc70d0eb621b Mon Sep 17 00:00:00 2001 +From: Richard Hughes +Date: Mon, 03 Oct 2011 10:34:04 +0000 +Subject: color: Cancel any in-progress directory searching on plugin unload + +--- +diff --git a/plugins/color/gcm-profile-store.c b/plugins/color/gcm-profile-store.c +index 0b3cfa0..bcb7adc 100644 +--- a/plugins/color/gcm-profile-store.c ++++ b/plugins/color/gcm-profile-store.c +@@ -34,6 +34,7 @@ struct _GcmProfileStorePrivate + { + GPtrArray *filename_array; + GPtrArray *directory_array; ++ GCancellable *cancellable; + }; + + enum { +@@ -326,7 +327,7 @@ gcm_profile_store_next_files_cb (GObject *source_object, + g_file_enumerator_next_files_async (enumerator, + 5, + G_PRIORITY_LOW, +- NULL, ++ profile_store->priv->cancellable, + gcm_profile_store_next_files_cb, + user_data); + +@@ -343,6 +344,7 @@ gcm_profile_store_enumerate_children_cb (GObject *source_object, + gchar *path = NULL; + GError *error = NULL; + GFileEnumerator *enumerator; ++ GcmProfileStore *profile_store = GCM_PROFILE_STORE (user_data); + + enumerator = g_file_enumerate_children_finish (G_FILE (source_object), + res, +@@ -360,7 +362,7 @@ gcm_profile_store_enumerate_children_cb (GObject *source_object, + g_file_enumerator_next_files_async (enumerator, + 5, + G_PRIORITY_LOW, +- NULL, ++ profile_store->priv->cancellable, + gcm_profile_store_next_files_cb, + user_data); + g_object_unref (enumerator); +@@ -407,7 +409,7 @@ gcm_profile_store_search_path (GcmProfileStore *profile_store, const gchar *path + G_FILE_ATTRIBUTE_STANDARD_TYPE, + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, + G_PRIORITY_LOW, +- NULL, ++ profile_store->priv->cancellable, + gcm_profile_store_enumerate_children_cb, + profile_store); + out: +@@ -416,14 +418,16 @@ out: + } + + static gboolean +-gcm_profile_store_mkdir_with_parents (const gchar *filename, GError **error) ++gcm_profile_store_mkdir_with_parents (const gchar *filename, ++ GCancellable *cancellable, ++ GError **error) + { + gboolean ret; + GFile *file; + + /* ensure destination exists */ + file = g_file_new_for_path (filename); +- ret = g_file_make_directory_with_parents (file, NULL, error); ++ ret = g_file_make_directory_with_parents (file, cancellable, error); + g_object_unref (file); + + return ret; +@@ -438,7 +442,9 @@ gcm_profile_store_search (GcmProfileStore *profile_store) + + /* get Linux per-user profiles */ + path = g_build_filename (g_get_user_data_dir (), "icc", NULL); +- ret = gcm_profile_store_mkdir_with_parents (path, &error); ++ ret = gcm_profile_store_mkdir_with_parents (path, ++ profile_store->priv->cancellable, ++ &error); + if (!ret) { + g_warning ("failed to create directory on startup: %s", error->message); + g_error_free (error); +@@ -480,6 +486,7 @@ static void + gcm_profile_store_init (GcmProfileStore *profile_store) + { + profile_store->priv = GCM_PROFILE_STORE_GET_PRIVATE (profile_store); ++ profile_store->priv->cancellable = g_cancellable_new (); + profile_store->priv->filename_array = g_ptr_array_new_with_free_func (g_free); + profile_store->priv->directory_array = g_ptr_array_new_with_free_func ((GDestroyNotify) gcm_profile_store_helper_free); + } +@@ -490,6 +497,8 @@ gcm_profile_store_finalize (GObject *object) + GcmProfileStore *profile_store = GCM_PROFILE_STORE (object); + GcmProfileStorePrivate *priv = profile_store->priv; + ++ g_cancellable_cancel (profile_store->priv->cancellable); ++ g_object_unref (profile_store->priv->cancellable); + g_ptr_array_unref (priv->filename_array); + g_ptr_array_unref (priv->directory_array); + +-- +cgit v0.9.0.2 -- cgit v1.2.3-54-g00ecf