qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [patch 13/14] qemu: handle stop request in main loop


From: mtosatti
Subject: [Qemu-devel] [patch 13/14] qemu: handle stop request in main loop
Date: Wed, 22 Apr 2009 16:15:17 -0300
User-agent: quilt/0.46-1

Signed-off-by: Marcelo Tosatti <address@hidden>

Index: qemu-iothread-4/vl.c
===================================================================
--- qemu-iothread-4.orig/vl.c
+++ qemu-iothread-4/vl.c
@@ -3483,15 +3483,6 @@ void vm_start(void)
     }
 }
 
-void vm_stop(int reason)
-{
-    if (vm_running) {
-        cpu_disable_ticks();
-        vm_running = 0;
-        vm_state_notify(0, reason);
-    }
-}
-
 /* reset/shutdown handler */
 
 typedef struct QEMUResetEntry {
@@ -3505,6 +3496,7 @@ static int reset_requested;
 static int shutdown_requested;
 static int powerdown_requested;
 static int debug_requested;
+static int vmstop_requested;
 
 int qemu_shutdown_requested(void)
 {
@@ -3534,6 +3526,22 @@ static int qemu_debug_requested(void)
     return r;
 }
 
+static int qemu_vmstop_requested(void)
+{
+    int r = vmstop_requested;
+    vmstop_requested = 0;
+    return r;
+}
+
+static void do_vm_stop(int reason)
+{
+    if (vm_running) {
+        cpu_disable_ticks();
+        vm_running = 0;
+        vm_state_notify(0, reason);
+    }
+}
+
 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
 {
     QEMUResetEntry **pre, *re;
@@ -3697,6 +3705,11 @@ static void qemu_init_main_loop(void)
 #define qemu_mutex_lock_iothread() do { } while (0)
 #define qemu_mutex_unlock_iothread() do { } while (0)
 
+void vm_stop(int reason)
+{
+    do_vm_stop(reason);
+}
+
 #ifdef _WIN32
 static void host_main_loop_wait(int *timeout)
 {
@@ -3994,8 +4007,9 @@ static int vm_can_run(void)
 
 static void main_loop(void)
 {
-    for (;;) {
+    int r;
 
+    for (;;) {
         do {
 #ifdef CONFIG_PROFILER
             int64_t ti;
@@ -4023,6 +4037,8 @@ static void main_loop(void)
             qemu_system_reset();
         if (qemu_powerdown_requested())
             qemu_system_powerdown();
+        if ((r = qemu_vmstop_requested()))
+            vm_stop(r);
     }
 }
 

-- 





reply via email to

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