From b5a499ec7c34ea32f4ba379ec2b7cd352fe4c2d3 Mon Sep 17 00:00:00 2001
From: Richard Hughes <richard@hughsie.com>
Date: Thu, 9 May 2013 15:45:25 +0100
Subject: [PATCH] Ensure the package is removed from the sack properly
We have to remove the package from the array itself, and the hash cache.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=960081
---
lib/packagekit-glib2/pk-package-sack.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index 94d02c3..59e47fb 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -445,6 +445,7 @@ pk_package_sack_remove_package (PkPackageSack *sack, PkPackage *package)
g_return_val_if_fail (PK_IS_PACKAGE (package), FALSE);
/* remove from array */
+ g_hash_table_remove (sack->priv->table, pk_package_get_id (package));
ret = g_ptr_array_remove (sack->priv->array, package);
return ret;
@@ -467,7 +468,6 @@ pk_package_sack_remove_package_by_id (PkPackageSack *sack,
const gchar *package_id)
{
PkPackage *package;
- const gchar *id;
gboolean ret = FALSE;
guint i;
GPtrArray *array;
@@ -478,9 +478,8 @@ pk_package_sack_remove_package_by_id (PkPackageSack *sack,
array = sack->priv->array;
for (i = 0; i < array->len; i++) {
package = g_ptr_array_index (array, i);
- id = pk_package_get_id (package);
- if (g_strcmp0 (package_id, id) == 0) {
- g_ptr_array_remove_index (array, i);
+ if (g_strcmp0 (package_id, pk_package_get_id (package)) == 0) {
+ pk_package_sack_remove_package (sack, package);
ret = TRUE;
break;
}
--
1.8.2.1