diff options
author | Juan Quintela <quintela@redhat.com> | 2009-09-10 03:04:29 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-09-11 11:10:05 -0500 |
commit | 1eb7538b7753535f9502c8c5779fd9f4e80d1559 (patch) | |
tree | 7b591034769e41ff8c9592b8566c3cdba125c6bf | |
parent | 274dfed8ba1357496a549d21e94080bca2f7fcb4 (diff) | |
download | qemu-1eb7538b7753535f9502c8c5779fd9f4e80d1559.zip qemu-1eb7538b7753535f9502c8c5779fd9f4e80d1559.tar.gz qemu-1eb7538b7753535f9502c8c5779fd9f4e80d1559.tar.bz2 |
vmstate: add sensible arguments to vmstate_unregister()
vmsd alone is not enugh, because we can have several structs saved with the same description (vmsd).
Signed-off-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r-- | hw/hw.h | 2 | ||||
-rw-r--r-- | savevm.c | 11 |
2 files changed, 10 insertions, 3 deletions
@@ -509,5 +509,5 @@ extern void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, const void *opaque); extern int vmstate_register(int instance_id, const VMStateDescription *vmsd, void *base); -extern void vmstate_unregister(const char *idstr, void *opaque); +void vmstate_unregister(const VMStateDescription *vmsd, void *opaque); #endif @@ -1002,9 +1002,16 @@ int vmstate_register(int instance_id, const VMStateDescription *vmsd, return 0; } -void vmstate_unregister(const char *idstr, void *opaque) +void vmstate_unregister(const VMStateDescription *vmsd, void *opaque) { - unregister_savevm(idstr, opaque); + SaveStateEntry *se, *new_se; + + TAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) { + if (se->vmsd == vmsd && se->opaque == opaque) { + TAILQ_REMOVE(&savevm_handlers, se, entry); + qemu_free(se); + } + } } int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, |