summary refs log tree commit diff stats
path: root/savevm.c
diff options
context:
space:
mode:
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2009-04-17 17:10:59 +0000
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2009-04-17 17:10:59 +0000
commit41bd13afdabf62ba513e00fade177749d73e1c09 (patch)
tree1f4b20544f1488dcde434eb8ca60776c64e8443b /savevm.c
parentad067148585b1fc98814b1ca3db4d0c1fdd969e0 (diff)
downloadfocaccia-qemu-41bd13afdabf62ba513e00fade177749d73e1c09.tar.gz
focaccia-qemu-41bd13afdabf62ba513e00fade177749d73e1c09.zip
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
Diffstat (limited to 'savevm.c')
-rw-r--r--savevm.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/savevm.c b/savevm.c
index 70500dd57a..c15db9ae2d 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