[arch-commits] Commit in libgnome-keyring/trunk (PKGBUILD fix_endless_loop.patch)

Ionut Biru ibiru at archlinux.org
Fri Apr 16 19:49:16 UTC 2010


    Date: Friday, April 16, 2010 @ 15:49:15
  Author: ibiru
Revision: 77648

upgpkg: libgnome-keyring 2.30.0-2
fix infinte loop due to no notification from dbus, fixing FS#18908 

Added:
  libgnome-keyring/trunk/fix_endless_loop.patch
Modified:
  libgnome-keyring/trunk/PKGBUILD

------------------------+
 PKGBUILD               |    9 ++++++---
 fix_endless_loop.patch |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2010-04-16 19:48:40 UTC (rev 77647)
+++ PKGBUILD	2010-04-16 19:49:15 UTC (rev 77648)
@@ -3,7 +3,7 @@
 
 pkgname=libgnome-keyring
 pkgver=2.30.0
-pkgrel=1
+pkgrel=2
 pkgdesc="GNOME keyring client library"
 arch=(i686 x86_64)
 license=('GPL' 'LGPL')
@@ -11,11 +11,14 @@
 makedepends=('intltool' 'pkgconfig' 'python')
 options=('!libtool' '!emptydirs')
 url="http://www.gnome.org"
-source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.30/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('11e64445537a8fab367875d1ae4aa00db9227c4db384c5d019cfa85c977b40ec')
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.30/${pkgname}-${pkgver}.tar.bz2
+	fix_endless_loop.patch)
+sha256sums=('11e64445537a8fab367875d1ae4aa00db9227c4db384c5d019cfa85c977b40ec'
+	    '6e53216a8fae3e4c4888a44ff14e80fe540b9f21ef3276976cc78928d99cf9b7')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
+  patch -Np1 -i "${srcdir}/fix_endless_loop.patch" || return 1
   ./configure --prefix=/usr --sysconfdir=/etc \
       --localstatedir=/var --disable-static \
       --libexecdir=/usr/lib/gnome-keyring || return 1

Added: fix_endless_loop.patch
===================================================================
--- fix_endless_loop.patch	                        (rev 0)
+++ fix_endless_loop.patch	2010-04-16 19:49:15 UTC (rev 77648)
@@ -0,0 +1,46 @@
+From 942ff4eae19732d9f5fd0d549385a7f2d9842444 Mon Sep 17 00:00:00 2001
+From: Stef Walter <stef at memberwebs.com>
+Date: Fri, 09 Apr 2010 18:39:38 +0000
+Subject: Workaround for problem with endless loop during blocking operations.
+
+Research done by Hiroyuki Ikezoe
+
+This is due to a bug in libdbus where the pending call is completed
+without the relevant callback being called when used in certain
+threading situations.
+
+Fixes bug #606902
+---
+diff --git a/library/gkr-operation.c b/library/gkr-operation.c
+index 214ecc7..9f49e73 100644
+--- a/library/gkr-operation.c
++++ b/library/gkr-operation.c
+@@ -363,13 +363,25 @@ gkr_operation_request (GkrOperation *op, DBusMessage *req)
+ GnomeKeyringResult
+ gkr_operation_block (GkrOperation *op)
+ {
++	DBusPendingCall *pending;
+ 	g_return_val_if_fail (op, BROKEN);
+ 
+ 	gkr_operation_ref (op);
+ 
+ 	while ((int) gkr_operation_get_result (op) == INCOMPLETE) {
+ 		if (op->pending) {
+-			dbus_pending_call_block (op->pending);
++			/*
++			 * DBus has strange behavior that can complete a pending call
++			 * in another thread and somehow does this without calling our
++			 * on_pending_call_notify. So guard against this brokenness.
++			 */
++			pending = op->pending;
++			dbus_pending_call_block (pending);
++			if (op->pending == pending) {
++				g_return_val_if_fail (dbus_pending_call_get_completed (pending), BROKEN);
++				on_pending_call_notify (pending, op);
++				g_assert (op->pending != pending);
++			}
+ 		} else if (op->prompting) {
+ 			dbus_connection_flush (op->conn);
+ 			while (op->prompting && (int) gkr_operation_get_result (op) == INCOMPLETE) {
+--
+cgit v0.8.3.1




More information about the arch-commits mailing list