rpms/PackageKit/devel pk-fix-64bit-codecs.patch, NONE, 1.1 pk-fix-cancel-at-speed-unlucky.patch, NONE, 1.1 PackageKit.spec, 1.63, 1.64

Richard Hughes rhughes at fedoraproject.org
Tue Sep 30 12:53:29 UTC 2008


Author: rhughes

Update of /cvs/pkgs/rpms/PackageKit/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv18279

Modified Files:
	PackageKit.spec 
Added Files:
	pk-fix-64bit-codecs.patch pk-fix-cancel-at-speed-unlucky.patch 
Log Message:
* Tue Sep 30 2008 Richard Hughes  <rhughes at redhat.com> - 0.3.5-3
- Fix a bug where the daemon could crash when cancelling a lot of transactions.
- Fix installing codecs with a 64 bit machine


pk-fix-64bit-codecs.patch:

--- NEW FILE pk-fix-64bit-codecs.patch ---
commit 920574b72805a630ea989b32012e2b4bbf1841ea
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 30 13:21:08 2008 +0100

    bugfix: use a ()(64bit) suffix for the package provides on 64 bit machines

diff --git a/contrib/gstreamer-plugin/pk-gstreamer-install.c b/contrib/gstreamer-plugin/pk-gstreamer-install.c
index f9ba620..a2d6602 100644
--- a/contrib/gstreamer-plugin/pk-gstreamer-install.c
+++ b/contrib/gstreamer-plugin/pk-gstreamer-install.c
@@ -22,6 +22,7 @@
 
 #include <gst/gst.h>
 #include <string.h>
+#include <sys/utsname.h>
 #include <dbus/dbus-glib.h>
 
 typedef struct {
@@ -227,6 +228,44 @@ pk_gst_codec_free (codec_info *codec)
 }
 
 /**
+ * pk_gst_get_arch_suffix:
+ *
+ * Return value: something other than blank if we are running on 64 bit.
+ **/
+static const gchar *
+pk_gst_get_arch_suffix (void)
+{
+	gint retval;
+	const gchar *suffix = "";
+	struct utsname buf;
+
+	retval = uname (&buf);
+
+	/* did we get valid value? */
+	if (retval != 0 || buf.machine == NULL) {
+		g_warning ("cannot get machine type");
+		goto out;
+	}
+
+	/* 32 bit machines */
+	if (strcmp (buf.machine, "i386") == 0 ||
+	    strcmp (buf.machine, "i586") == 0 ||
+	    strcmp (buf.machine, "i686") == 0)
+		goto out;
+
+	/* 64 bit machines */
+	if (strcmp (buf.machine, "x86_64") == 0) {
+		suffix = "()(64bit)";
+		goto out;
+	}
+
+	g_warning ("did not recognise machine type: '%s'", buf.machine);
+out:
+	return suffix;
+}
+
+
+/**
  * main:
  **/
 int
@@ -245,6 +284,7 @@ main (int argc, char **argv)
 	gchar **codecs = NULL;
 	gint xid = 0;
 	gint retval = 1;
+	const gchar *suffix;
 
 	const GOptionEntry options[] = {
 		{ "transient-for", '\0', 0, G_OPTION_ARG_INT, &xid, "The XID of the parent window", NULL },
@@ -288,6 +328,8 @@ main (int argc, char **argv)
 		goto out;
 	}
 
+	/* use a ()(64bit) suffix for 64 bit */
+	suffix = pk_gst_get_arch_suffix ();
 
 	/* process argv */
 	array = g_ptr_array_new ();
@@ -301,18 +343,18 @@ main (int argc, char **argv)
 			g_print ("skipping %s\n", codecs[i]);
 			continue;
 		}
+		g_message ("Codec nice name: %s", info->codec_name);
 		if (info->structure != NULL) {
 			s = pk_gst_structure_to_provide (info->structure);
-			type = g_strdup_printf ("gstreamer0.10(%s-%s)%s", info->type_name,
-						gst_structure_get_name (info->structure), s ? s : "");
+			type = g_strdup_printf ("gstreamer0.10(%s-%s)%s%s", info->type_name,
+						gst_structure_get_name (info->structure), s, suffix);
 			g_free (s);
+			g_message ("structure: %s", type);
 		} else {
 			type = g_strdup_printf ("gstreamer0.10(%s)", info->type_name);
+			g_message ("non-structure: %s", type);
 		}
 
-		g_message ("Codec nice name: %s", info->codec_name);
-		g_message ("%s", type);
-
 		/* create (ss) structure */
 		varray = g_value_array_new (2);
 		value = g_new0 (GValue, 1);

pk-fix-cancel-at-speed-unlucky.patch:

--- NEW FILE pk-fix-cancel-at-speed-unlucky.patch ---
commit d2c3725b5414e27fa05518f04eab01ab7a0b1a89
Author: Richard Hughes <hughsie at localhost.localdomain>
Date:   Tue Sep 30 10:42:32 2008 +0100

    bugfix: remove items about to be run from the transaction list without crashing
    
    The daemon sometimes crashes when a large number of requests are queued and then cancelled
    This is because by sheer luck (on unluckyness...) we get a request in the idle time between
    the transaction being scheduled to run, and actually being run.
    In this case, save the idle callback ID, and stop the callback from occurring

diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index d975f6b..9470da9 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -69,6 +69,7 @@ typedef struct {
 	gboolean		 finished;
 	PkTransaction		*transaction;
 	gchar			*tid;
+	guint			 idle_id;
 } PkTransactionItem;
 
 enum {
@@ -199,6 +200,17 @@ pk_transaction_list_remove (PkTransactionList *tlist, const gchar *tid)
 		egg_warning ("already finished, so waiting to timeout");
 		return FALSE;
 	}
+	/* check if we are running, or _just_ about to be run */
+	if (item->running) {
+		if (item->idle_id == 0) {
+			egg_warning ("already running, but no idle_id");
+			return FALSE;
+		}
+		/* just about to be run! */
+		egg_debug ("cancelling the callback to the 'lost' transaction");
+		g_source_remove (item->idle_id);
+		item->idle_id = 0;
+	}
 	ret = pk_transaction_list_remove_internal (tlist, item);
 	return ret;
 }
@@ -237,6 +249,7 @@ pk_transaction_list_run_idle_cb (PkTransactionItem *item)
 		egg_error ("failed to run transaction (fatal)");
 
 	/* never try to idle add this again */
+	item->idle_id = 0;
 	return FALSE;
 }
 
@@ -251,7 +264,7 @@ pk_transaction_list_run_item (PkTransactionList *tlist, PkTransactionItem *item)
 	item->running = TRUE;
 
 	/* add this idle, so that we don't have a deep out-of-order callchain */
-	g_idle_add ((GSourceFunc) pk_transaction_list_run_idle_cb, item);
+	item->idle_id = g_idle_add ((GSourceFunc) pk_transaction_list_run_idle_cb, item);
 }
 
 /**


Index: PackageKit.spec
===================================================================
RCS file: /cvs/pkgs/rpms/PackageKit/devel/PackageKit.spec,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -r1.63 -r1.64
--- PackageKit.spec	30 Sep 2008 08:46:56 -0000	1.63
+++ PackageKit.spec	30 Sep 2008 12:52:58 -0000	1.64
@@ -8,15 +8,18 @@
 Summary:   System daemon that is a DBUS abstraction layer for package management
 Name:      PackageKit
 Version:   0.3.5
-Release:   2%{?dist}
+Release:   3%{?dist}
 License:   GPLv2+
 Group:     System Environment/Libraries
 URL:       http://packagekit.freedesktop.org
 Source0:   http://www.packagekit.org/releases/%{name}-%{version}.tar.gz
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
-# upstream: c9a01198d494f06ae9e0b3e2a002f941da118f00
-#Patch0:    pk-dont-send-finished-from-dispatcher.patch
+# upstream: 920574b72805a630ea989b32012e2b4bbf1841ea
+Patch0:    pk-fix-64bit-codecs.patch
+
+# upstream: d2c3725b5414e27fa05518f04eab01ab7a0b1a89
+Patch1:    pk-fix-cancel-at-speed-unlucky.patch
 
 Requires: dbus >= %{dbus_version}
 Requires: dbus-glib >= %{dbus_glib_version}
@@ -155,7 +158,8 @@
 
 %prep
 %setup -q
-#%patch0 -p1
+%patch0 -p1
+%patch1 -p1
 
 %build
 %configure --enable-yum --enable-smart --with-default-backend=yum --disable-local
@@ -296,6 +300,10 @@
 %{_includedir}/*
 
 %changelog
+* Tue Sep 30 2008 Richard Hughes  <rhughes at redhat.com> - 0.3.5-3
+- Fix a bug where the daemon could crash when cancelling a lot of transactions.
+- Fix installing codecs with a 64 bit machine
+
 * Tue Sep 30 2008 Richard Hughes  <rhughes at redhat.com> - 0.3.5-2
 - Obsolete more releases of codeina to fix upgrades on rawhide.
 




More information about the fedora-extras-commits mailing list