From 72de784ee3fe4cefb28b1e155c213a55e27f1abf Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 15 Jan 2018 15:35:50 +0100 Subject: [PATCH] libpakfire: Don't keep a reference to Transaction in Step Signed-off-by: Michael Tremer --- src/libpakfire/step.c | 77 ++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/src/libpakfire/step.c b/src/libpakfire/step.c index ff1ec35f7..c45ba8325 100644 --- a/src/libpakfire/step.c +++ b/src/libpakfire/step.c @@ -37,21 +37,58 @@ struct _PakfireStep { PakfirePool pool; - PakfireTransaction transaction; PakfirePackage package; Id id; + pakfire_step_type_t type; int nrefs; }; +static pakfire_step_type_t get_type(Transaction* transaction, Id id) { + int type = transaction_type(transaction, id, + SOLVER_TRANSACTION_SHOW_ACTIVE|SOLVER_TRANSACTION_CHANGE_IS_REINSTALL); + + // Translate solver types into our own types + switch (type) { + case SOLVER_TRANSACTION_INSTALL: + case SOLVER_TRANSACTION_MULTIINSTALL: + return PAKFIRE_STEP_INSTALL; + + case SOLVER_TRANSACTION_REINSTALL: + case SOLVER_TRANSACTION_MULTIREINSTALL: + return PAKFIRE_STEP_REINSTALL; + + case SOLVER_TRANSACTION_ERASE: + return PAKFIRE_STEP_ERASE; + + case SOLVER_TRANSACTION_DOWNGRADE: + return PAKFIRE_STEP_DOWNGRADE; + + case SOLVER_TRANSACTION_UPGRADE: + return PAKFIRE_STEP_UPGRADE; + + case SOLVER_TRANSACTION_OBSOLETES: + return PAKFIRE_STEP_OBSOLETE; + + // Anything we don't care about + case SOLVER_TRANSACTION_IGNORE: + case SOLVER_TRANSACTION_REINSTALLED: + case SOLVER_TRANSACTION_DOWNGRADED: + default: + return PAKFIRE_STEP_IGNORE; + } +} + PAKFIRE_EXPORT PakfireStep pakfire_step_create(PakfireTransaction transaction, Id id) { + Transaction* t = pakfire_transaction_get_transaction(transaction); + PakfireStep step = pakfire_calloc(1, sizeof(*step)); if (step) { DEBUG("Allocated Step at %p\n", step); step->nrefs = 1; step->pool = pakfire_transaction_get_pool(transaction); - step->transaction = pakfire_transaction_ref(transaction); step->id = id; + step->type = get_type(t, step->id); // Get the package step->package = pakfire_package_create(step->pool, step->id); @@ -68,7 +105,6 @@ PAKFIRE_EXPORT PakfireStep pakfire_step_ref(PakfireStep step) { static void pakfire_step_free(PakfireStep step) { pakfire_package_unref(step->package); - pakfire_transaction_unref(step->transaction); pakfire_pool_unref(step->pool); pakfire_free(step); @@ -91,40 +127,7 @@ PAKFIRE_EXPORT PakfirePackage pakfire_step_get_package(PakfireStep step) { } PAKFIRE_EXPORT pakfire_step_type_t pakfire_step_get_type(PakfireStep step) { - Transaction* trans = pakfire_transaction_get_transaction(step->transaction); - - int type = transaction_type(trans, step->id, - SOLVER_TRANSACTION_SHOW_ACTIVE|SOLVER_TRANSACTION_CHANGE_IS_REINSTALL); - - // Translate solver types into our own types - switch (type) { - case SOLVER_TRANSACTION_INSTALL: - case SOLVER_TRANSACTION_MULTIINSTALL: - return PAKFIRE_STEP_INSTALL; - - case SOLVER_TRANSACTION_REINSTALL: - case SOLVER_TRANSACTION_MULTIREINSTALL: - return PAKFIRE_STEP_REINSTALL; - - case SOLVER_TRANSACTION_ERASE: - return PAKFIRE_STEP_ERASE; - - case SOLVER_TRANSACTION_DOWNGRADE: - return PAKFIRE_STEP_DOWNGRADE; - - case SOLVER_TRANSACTION_UPGRADE: - return PAKFIRE_STEP_UPGRADE; - - case SOLVER_TRANSACTION_OBSOLETES: - return PAKFIRE_STEP_OBSOLETE; - - // Anything we don't care about - case SOLVER_TRANSACTION_IGNORE: - case SOLVER_TRANSACTION_REINSTALLED: - case SOLVER_TRANSACTION_DOWNGRADED: - default: - return PAKFIRE_STEP_IGNORE; - } + return step->type; } PAKFIRE_EXPORT const char* pakfire_step_get_type_string(PakfireStep step) { -- 2.39.5