From: J. Ali Harlow Date: Fri, 23 Mar 2012 20:24:09 +0000 (+0000) Subject: Fix bug causing razor_transaction_resolve() to spin X-Git-Tag: 0.5.5 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=60eadf61c70f503d0c9548adc3d3d26ad53ef003;p=razor2.git%2F.git Fix bug causing razor_transaction_resolve() to spin --- diff --git a/librazor/transaction.c b/librazor/transaction.c index 13d6a9a..ad73d1b 100644 --- a/librazor/transaction.c +++ b/librazor/transaction.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc - * Copyright (C) 2009, 2011 J. Ali Harlow + * Copyright (C) 2009, 2011, 2012 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +31,6 @@ #include #include #include -#include #include #include "razor-internal.h" @@ -134,10 +133,10 @@ transaction_set_install_package(struct transaction_set *ts, pkgs = ts->set->packages.data; i = package - pkgs; - if (ts->packages[i] == TRANS_PACKAGE_PRESENT) + if (ts->packages[i] & TRANS_PACKAGE_PRESENT) return; - ts->packages[i] = TRANS_PACKAGE_PRESENT; + ts->packages[i] |= TRANS_PACKAGE_PRESENT; prop = list_first(&package->properties, &ts->set->property_pool); while (prop) { @@ -156,10 +155,10 @@ transaction_set_remove_package(struct transaction_set *ts, pkgs = ts->set->packages.data; i = package - pkgs; - if (ts->packages[i] == 0) + if (!(ts->packages[i] & TRANS_PACKAGE_PRESENT)) return; - ts->packages[i] = 0; + ts->packages[i] &= ~TRANS_PACKAGE_PRESENT; prop = list_first(&package->properties, &ts->set->property_pool); while (prop) { @@ -547,6 +546,9 @@ update_unsatisfied_packages(struct razor_transaction *trans) while (razor_package_iterator_next(&pkg_iter, &pkg, RAZOR_DETAIL_NAME, &name, RAZOR_DETAIL_LAST)) { + if (!(trans->system.packages[pkg - spkgs] & TRANS_PACKAGE_PRESENT)) + continue; + #if 0 fprintf(stderr, "updating %s because %s %s %s " "isn't satisfied\n", @@ -699,6 +701,7 @@ flush_scheduled_system_updates(struct razor_transaction *trans) RAZOR_DETAIL_LAST)) { if (!(trans->system.packages[p - spkgs] & TRANS_PACKAGE_UPDATE)) continue; + trans->system.packages[p - spkgs] &= ~TRANS_PACKAGE_UPDATE; if (!prop_iter_seek_to(&ppi, RAZOR_PROPERTY_PROVIDES, name)) continue; @@ -740,6 +743,7 @@ flush_scheduled_upstream_updates(struct razor_transaction *trans) RAZOR_DETAIL_LAST)) { if (!(trans->upstream.packages[p - upkgs] & TRANS_PACKAGE_UPDATE)) continue; + trans->upstream.packages[p - upkgs] &= ~TRANS_PACKAGE_UPDATE; if (prop_iter_seek_to(&spi, RAZOR_PROPERTY_PROVIDES, name)) remove_matching_providers(trans,