@@ -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,
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> --- hw/hw.h | 2 +- savevm.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-)