On 25 July 2018 at 09:59, Stefan Hajnoczi <stefa...@redhat.com> wrote: > Image file loaders may add a series of roms. If an error occurs partway > through loading there is no easy way to drop previously added roms. > > This patch adds a transaction mechanism that works like this: > > rom_transaction_begin(); > ...call rom_add_*()... > rom_transaction_end(ok); > > If ok is false then roms added in this transaction are dropped. > > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > +void rom_transaction_end(bool commit) > +{ > + Rom *rom; > + Rom *tmp; > + > + QTAILQ_FOREACH_SAFE(rom, &roms, next, tmp) { > + if (rom->committed) { > + continue; > + } > + if (commit) { > + rom->committed = true; > + } else { > + QTAILQ_REMOVE(&roms, rom, next); > + g_free(rom->data); > + g_free(rom->path); > + g_free(rom->name); > + g_free(rom->fw_dir); > + g_free(rom->fw_file); > + g_free(rom);
Is it worth having a rom_free() function so we can share the "free all the pointers" code between this and the error-exit codepath at the end of rom_add_file() ? Either way Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> thanks -- PMM