qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 4/7] Add qemu_unregister_reset


From: Jan Kiszka
Subject: [Qemu-devel] [PATCH 4/7] Add qemu_unregister_reset
Date: Thu, 02 Jul 2009 00:19:02 +0200
User-agent: StGIT/0.14.3

Will be used by '-boot once=...', and should also help in other use
cases.

Signed-off-by: Jan Kiszka <address@hidden>
---

 hw/hw.h |    1 +
 vl.c    |   17 +++++++++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/hw/hw.h b/hw/hw.h
index 0f1ef98..cfd6a4e 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -260,6 +260,7 @@ void unregister_savevm(const char *idstr, void *opaque);
 typedef void QEMUResetHandler(void *opaque);
 
 void qemu_register_reset(QEMUResetHandler *func, void *opaque);
+void qemu_unregister_reset(QEMUResetHandler *func, void *opaque);
 
 /* handler to set the boot_device order for a specific type of QEMUMachine */
 /* return 0 if success */
diff --git a/vl.c b/vl.c
index 9d0e298..0586a8a 100644
--- a/vl.c
+++ b/vl.c
@@ -3722,12 +3722,25 @@ void qemu_register_reset(QEMUResetHandler *func, void 
*opaque)
     TAILQ_INSERT_TAIL(&reset_handlers, re, entry);
 }
 
-void qemu_system_reset(void)
+void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
 {
     QEMUResetEntry *re;
 
-    /* reset all devices */
     TAILQ_FOREACH(re, &reset_handlers, entry) {
+        if (re->func == func && re->opaque == opaque) {
+            TAILQ_REMOVE(&reset_handlers, re, entry);
+            qemu_free(re);
+            return;
+        }
+    }
+}
+
+void qemu_system_reset(void)
+{
+    QEMUResetEntry *re, *nre;
+
+    /* reset all devices */
+    TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
         re->func(re->opaque);
     }
 }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]