From: aliguori Date: Fri, 17 Apr 2009 17:10:59 +0000 (+0000) Subject: Add unregister_savevm() (Mark McLoughlin) X-Git-Tag: TizenStudio_2.0_p2.3~9137 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5599016142c093c00a383a156eb036813e8bd85e;p=sdk%2Femulator%2Fqemu.git 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 Signed-off-by: Anthony Liguori git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7148 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/hw/hw.h b/hw/hw.h index e9628d4..d0cf598 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -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); diff --git a/savevm.c b/savevm.c index 70500dd..c15db9a 100644 --- a/savevm.c +++ b/savevm.c @@ -647,6 +647,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