Commit 41bd13afdabf62ba513e00fade177749d73e1c09

Authored by aliguori
1 parent ad067148

Add unregister_savevm() (Mark McLoughlin)

Currently there's no way to unregister a savevm callback, so
e.g. if a NIC is hot-unplugged and a savevm is issued, we'll
segfault.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7148 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 18 additions and 0 deletions
... ... @@ -239,6 +239,8 @@ int register_savevm_live(const char *idstr,
239 239 LoadStateHandler *load_state,
240 240 void *opaque);
241 241  
  242 +void unregister_savevm(const char *idstr, void *opaque);
  243 +
242 244 typedef void QEMUResetHandler(void *opaque);
243 245  
244 246 void qemu_register_reset(QEMUResetHandler *func, void *opaque);
... ...
savevm.c
... ... @@ -647,6 +647,22 @@ int register_savevm(const char *idstr,
647 647 NULL, save_state, load_state, opaque);
648 648 }
649 649  
  650 +void unregister_savevm(const char *idstr, void *opaque)
  651 +{
  652 + SaveStateEntry **pse;
  653 +
  654 + pse = &first_se;
  655 + while (*pse != NULL) {
  656 + if (strcmp((*pse)->idstr, idstr) == 0 && (*pse)->opaque == opaque) {
  657 + SaveStateEntry *next = (*pse)->next;
  658 + qemu_free(*pse);
  659 + *pse = next;
  660 + continue;
  661 + }
  662 + pse = &(*pse)->next;
  663 + }
  664 +}
  665 +
650 666 #define QEMU_VM_FILE_MAGIC 0x5145564d
651 667 #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002
652 668 #define QEMU_VM_FILE_VERSION 0x00000003
... ...