chiark / gitweb /
manager: fix a crash in isolating
authorMichal Schmidt <mschmidt@redhat.com>
Mon, 17 Oct 2011 09:12:12 +0000 (11:12 +0200)
committerMichal Schmidt <mschmidt@redhat.com>
Mon, 17 Oct 2011 09:29:27 +0000 (11:29 +0200)
commit563ba9ea6e60774086555998b957edf923e24b46
tree8dd5598841b48768d2164c650c395228a7b42739
parent64685e0cea62b4937f0804e47ce2cb7929f58223
manager: fix a crash in isolating

HASHMAP_FOREACH is safe against the removal of the current entry, but
not against the removal of other entries. job_finish_and_invalidate()
can recursively remove other entries.

It triggered an assertion failure:
  Assertion 'j->installed' failed at src/manager.c:1218, function
  transaction_apply(). Aborting.

Fix the crash by iterating from the beginning when there is a
possibility that the iterator could be invalid.

It is O(n^2) in the worst case, but that's better than a crash.

https://bugzilla.redhat.com/show_bug.cgi?id=717325
src/job.c
src/manager.c