- When returning results from a cache we should always return finished in
an idle loop so we can block and wait for a response
- This fixes the bug where if you have two GetUpdates in the queue the
second would hang waiting for the first, even though it had already
finished.
This commit is contained in:
parent
c26f0f21ad
commit
d8ef186343
@ -8,7 +8,7 @@
|
||||
Summary: System daemon that is a DBUS abstraction layer for package management
|
||||
Name: PackageKit
|
||||
Version: 0.3.4
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
License: GPLv2+
|
||||
Group: System Environment/Libraries
|
||||
URL: http://packagekit.freedesktop.org
|
||||
@ -24,6 +24,9 @@ Patch1: pk-dont-schedule-the-whole-queue.patch
|
||||
# upstream: 16bea44b16fd8b1ac36cc5939caf1017eece12eb
|
||||
Patch2: pk-fix-yum-error-name.patch
|
||||
|
||||
# upstream: 58955c21674e37d43d7353d30ab1da3163699e94
|
||||
Patch3: pk-dont-hang-when-cache-deep.patch
|
||||
|
||||
Requires: dbus >= %{dbus_version}
|
||||
Requires: dbus-glib >= %{dbus_glib_version}
|
||||
Requires: PackageKit-libs = %{version}-%{release}
|
||||
@ -151,6 +154,7 @@ using PackageKit.
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
|
||||
%build
|
||||
%configure --enable-yum --enable-smart --with-default-backend=yum --disable-local
|
||||
@ -281,6 +285,12 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
|
||||
%{_includedir}/*
|
||||
|
||||
%changelog
|
||||
* Thu Sep 25 2008 Richard Hughes <rhughes@redhat.com> - 0.3.4-5
|
||||
- When returning results from a cache we should always return finished in an
|
||||
idle loop so we can block and wait for a response
|
||||
- This fixes the bug where if you have two GetUpdates in the queue the second
|
||||
would hang waiting for the first, even though it had already finished.
|
||||
|
||||
* Tue Sep 23 2008 Richard Hughes <rhughes@redhat.com> - 0.3.4-4
|
||||
- Fix the error dialog when no mirrors are found
|
||||
|
||||
|
||||
106
pk-dont-hang-when-cache-deep.patch
Normal file
106
pk-dont-hang-when-cache-deep.patch
Normal file
@ -0,0 +1,106 @@
|
||||
commit 58955c21674e37d43d7353d30ab1da3163699e94
|
||||
Author: Richard Hughes <richard@hughsie.com>
|
||||
Date: Thu Sep 25 14:32:25 2008 +0100
|
||||
|
||||
bugfix: finish a cached transaction in an idle loop
|
||||
|
||||
When returning results from a cache we should always return finished in an idle
|
||||
loop so we can block and wait for a response without having to know if we need
|
||||
to wait for ::Finished()
|
||||
|
||||
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
|
||||
index db68d4d..73f86dc 100644
|
||||
--- a/src/pk-transaction.c
|
||||
+++ b/src/pk-transaction.c
|
||||
@@ -1093,6 +1093,19 @@ pk_transaction_commit (PkTransaction *transaction)
|
||||
}
|
||||
|
||||
/**
|
||||
+ * pk_transaction_finished_idle_cb:
|
||||
+ **/
|
||||
+static gboolean
|
||||
+pk_transaction_finished_idle_cb (PkTransaction *transaction)
|
||||
+{
|
||||
+ const gchar *exit_text;
|
||||
+ exit_text = pk_exit_enum_to_text (PK_EXIT_ENUM_SUCCESS);
|
||||
+ egg_debug ("emitting finished '%s'", exit_text);
|
||||
+ g_signal_emit (transaction, signals [PK_TRANSACTION_FINISHED], 0, exit_text, 0);
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* pk_transaction_search_check:
|
||||
**/
|
||||
static gboolean
|
||||
@@ -1236,7 +1249,6 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
|
||||
{
|
||||
gboolean ret;
|
||||
GError *error;
|
||||
- const gchar *exit_text;
|
||||
gchar *sender;
|
||||
|
||||
g_return_if_fail (PK_IS_TRANSACTION (transaction));
|
||||
@@ -1275,10 +1287,7 @@ pk_transaction_accept_eula (PkTransaction *transaction, const gchar *eula_id, DB
|
||||
return;
|
||||
}
|
||||
|
||||
- exit_text = pk_exit_enum_to_text (PK_EXIT_ENUM_SUCCESS);
|
||||
- egg_debug ("emitting finished transaction '%s', %i", exit_text, 0);
|
||||
- g_signal_emit (transaction, signals [PK_TRANSACTION_FINISHED], 0, exit_text, 0);
|
||||
-
|
||||
+ g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
|
||||
dbus_g_method_return (context);
|
||||
}
|
||||
|
||||
@@ -1746,18 +1755,13 @@ pk_transaction_get_packages (PkTransaction *transaction, const gchar *filter, DB
|
||||
gboolean
|
||||
pk_transaction_get_old_transactions (PkTransaction *transaction, guint number, GError **error)
|
||||
{
|
||||
- const gchar *exit_text;
|
||||
-
|
||||
g_return_val_if_fail (PK_IS_TRANSACTION (transaction), FALSE);
|
||||
g_return_val_if_fail (transaction->priv->tid != NULL, FALSE);
|
||||
|
||||
egg_debug ("GetOldTransactions method called");
|
||||
|
||||
pk_transaction_db_get_list (transaction->priv->transaction_db, number);
|
||||
-
|
||||
- exit_text = pk_exit_enum_to_text (PK_EXIT_ENUM_SUCCESS);
|
||||
- egg_debug ("emitting finished transaction '%s', %i", exit_text, 0);
|
||||
- g_signal_emit (transaction, signals [PK_TRANSACTION_FINISHED], 0, exit_text, 0);
|
||||
+ g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -2071,10 +2075,7 @@ pk_transaction_get_update_detail (PkTransaction *transaction, gchar **package_id
|
||||
|
||||
/* if we have nothing to do, i.e. everything was in the cache */
|
||||
if (array->len == 0) {
|
||||
- const gchar *exit_text;
|
||||
- exit_text = pk_exit_enum_to_text (PK_EXIT_ENUM_SUCCESS);
|
||||
- egg_debug ("emitting finished '%s' as no more to process", exit_text);
|
||||
- g_signal_emit (transaction, signals [PK_TRANSACTION_FINISHED], 0, exit_text, 0);
|
||||
+ g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -2152,7 +2153,6 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
|
||||
if (updates_cache != NULL) {
|
||||
const PkPackageObj *obj;
|
||||
const gchar *info_text;
|
||||
- const gchar *exit_text;
|
||||
guint i;
|
||||
guint length;
|
||||
|
||||
@@ -2169,10 +2169,7 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
|
||||
g_free (package_id);
|
||||
}
|
||||
|
||||
- /* we are done */
|
||||
- exit_text = pk_exit_enum_to_text (PK_EXIT_ENUM_SUCCESS);
|
||||
- egg_debug ("emitting finished '%s'", exit_text);
|
||||
- g_signal_emit (transaction, signals [PK_TRANSACTION_FINISHED], 0, exit_text, 0);
|
||||
+ g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction);
|
||||
|
||||
dbus_g_method_return (context);
|
||||
return;
|
||||
Loading…
Reference in New Issue
Block a user