diff options
-rw-r--r-- | hw/hw.h | 1 | ||||
-rw-r--r-- | vl.c | 17 |
2 files changed, 16 insertions, 2 deletions
@@ -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 */ @@ -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); } } |