From: Jan Kiszka Date: Wed, 1 Jul 2009 22:19:02 +0000 (+0200) Subject: Add qemu_unregister_reset X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=dda9b29f61b198681346191a52be417bc195b0df;p=qmiga%2Fqemu.git Add qemu_unregister_reset Will be used by '-boot once=...', and should also help in other use cases. Signed-off-by: Jan Kiszka Signed-off-by: Anthony Liguori --- diff --git a/hw/hw.h b/hw/hw.h index c2c0ac0d7a..1e5783d973 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -261,6 +261,7 @@ void unregister_savevm(const char *idstr, void *opaque); typedef void QEMUResetHandler(void *opaque); void qemu_register_reset(QEMUResetHandler *func, void *opaque); +void qemu_unregister_reset(QEMUResetHandler *func, void *opaque); /* handler to set the boot_device order for a specific type of QEMUMachine */ /* return 0 if success */ diff --git a/vl.c b/vl.c index 841146a2b3..963b8999f7 100644 --- a/vl.c +++ b/vl.c @@ -3509,12 +3509,25 @@ void qemu_register_reset(QEMUResetHandler *func, void *opaque) TAILQ_INSERT_TAIL(&reset_handlers, re, entry); } -void qemu_system_reset(void) +void qemu_unregister_reset(QEMUResetHandler *func, void *opaque) { QEMUResetEntry *re; - /* reset all devices */ TAILQ_FOREACH(re, &reset_handlers, entry) { + if (re->func == func && re->opaque == opaque) { + TAILQ_REMOVE(&reset_handlers, re, entry); + qemu_free(re); + return; + } + } +} + +void qemu_system_reset(void) +{ + QEMUResetEntry *re, *nre; + + /* reset all devices */ + TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) { re->func(re->opaque); } }