Commit 41bd13afdabf62ba513e00fade177749d73e1c09
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
hw/hw.h
| @@ -239,6 +239,8 @@ int register_savevm_live(const char *idstr, | @@ -239,6 +239,8 @@ int register_savevm_live(const char *idstr, | ||
| 239 | LoadStateHandler *load_state, | 239 | LoadStateHandler *load_state, |
| 240 | void *opaque); | 240 | void *opaque); |
| 241 | 241 | ||
| 242 | +void unregister_savevm(const char *idstr, void *opaque); | ||
| 243 | + | ||
| 242 | typedef void QEMUResetHandler(void *opaque); | 244 | typedef void QEMUResetHandler(void *opaque); |
| 243 | 245 | ||
| 244 | void qemu_register_reset(QEMUResetHandler *func, void *opaque); | 246 | void qemu_register_reset(QEMUResetHandler *func, void *opaque); |
savevm.c
| @@ -647,6 +647,22 @@ int register_savevm(const char *idstr, | @@ -647,6 +647,22 @@ int register_savevm(const char *idstr, | ||
| 647 | NULL, save_state, load_state, opaque); | 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 | #define QEMU_VM_FILE_MAGIC 0x5145564d | 666 | #define QEMU_VM_FILE_MAGIC 0x5145564d |
| 651 | #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002 | 667 | #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002 |
| 652 | #define QEMU_VM_FILE_VERSION 0x00000003 | 668 | #define QEMU_VM_FILE_VERSION 0x00000003 |