diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-17 18:06:46 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-17 18:06:46 +0000 |
commit | 00f56b3dcfd20ad053706342a848951051a760ea (patch) | |
tree | 3da60c793b30ca15168f288d2258138dca977159 | |
parent | 71dc1b6fcba9a77deed7fd24ee1c56bee10ec063 (diff) | |
download | qemu-00f56b3dcfd20ad053706342a848951051a760ea.tar.gz |
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/branches/stable_0_10@7158 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | hw/hw.h | 2 | ||||
-rw-r--r-- | savevm.c | 16 |
2 files changed, 18 insertions, 0 deletions
@@ -239,6 +239,8 @@ int register_savevm_live(const char *idstr, LoadStateHandler *load_state, void *opaque); +void unregister_savevm(const char *idstr, void *opaque); + typedef void QEMUResetHandler(void *opaque); void qemu_register_reset(QEMUResetHandler *func, void *opaque); @@ -643,6 +643,22 @@ int register_savevm(const char *idstr, NULL, save_state, load_state, opaque); } +void unregister_savevm(const char *idstr, void *opaque) +{ + SaveStateEntry **pse; + + pse = &first_se; + while (*pse != NULL) { + if (strcmp((*pse)->idstr, idstr) == 0 && (*pse)->opaque == opaque) { + SaveStateEntry *next = (*pse)->next; + qemu_free(*pse); + *pse = next; + continue; + } + pse = &(*pse)->next; + } +} + #define QEMU_VM_FILE_MAGIC 0x5145564d #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002 #define QEMU_VM_FILE_VERSION 0x00000003 |