diff options
-rw-r--r-- | src/core/transaction.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/core/transaction.c b/src/core/transaction.c index 3984947783..394c181352 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -603,6 +603,8 @@ rollback: } int transaction_activate(Transaction *tr, Manager *m, JobMode mode, DBusError *e) { + Iterator i; + Job *j; int r; unsigned generation = 1; @@ -611,6 +613,12 @@ int transaction_activate(Transaction *tr, Manager *m, JobMode mode, DBusError *e /* This applies the changes recorded in tr->jobs to * the actual list of jobs, if possible. */ + /* Reset the generation counter of all installed jobs. The detection of cycles + * looks at installed jobs. If they had a non-zero generation from some previous + * walk of the graph, the algorithm would break. */ + HASHMAP_FOREACH(j, m->jobs, i) + j->generation = 0; + /* First step: figure out which jobs matter */ transaction_find_jobs_that_matter_to_anchor(tr->anchor_job, generation++); |