From: Lennart Poettering Date: Wed, 27 Jan 2010 00:43:18 +0000 (+0100) Subject: fully clean up job dependencies on abort, too X-Git-Tag: 0.git+20100605+dfd8ee-1~411 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f04fa1d5aa4ae76c6e95b986834b4223f51527b3;p=systemd fully clean up job dependencies on abort, too --- diff --git a/manager.c b/manager.c index 600b89cc..3430b97b 100644 --- a/manager.c +++ b/manager.c @@ -109,6 +109,24 @@ static void transaction_delete_unit(Manager *m, Unit *u) { transaction_delete_job(m, j); } +static void transaction_clean_dependencies(Manager *m) { + Iterator i; + Job *j; + + assert(m); + + /* Drops all dependencies of all installed jobs */ + + HASHMAP_FOREACH(j, m->jobs, i) { + while (j->subject_list) + job_dependency_free(j->subject_list); + while (j->object_list) + job_dependency_free(j->object_list); + } + + assert(!m->transaction_anchor); +} + static void transaction_abort(Manager *m) { Job *j; @@ -121,7 +139,8 @@ static void transaction_abort(Manager *m) { job_free(j); assert(hashmap_isempty(m->transaction_jobs)); - assert(!m->transaction_anchor); + + transaction_clean_dependencies(m); } static void transaction_find_jobs_that_matter_to_anchor(Manager *m, Job *j, unsigned generation) { @@ -539,14 +558,7 @@ static int transaction_apply(Manager *m, JobMode mode) { } /* As last step, kill all remaining job dependencies. */ - HASHMAP_FOREACH(j, m->jobs, i) { - while (j->subject_list) - job_dependency_free(j->subject_list); - while (j->object_list) - job_dependency_free(j->object_list); - } - - assert(!m->transaction_anchor); + transaction_clean_dependencies(m); return 0;