From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org, xen-devel@lists.xensource.com
Cc: Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 01/13] Handle terminating signals.
Date: Thu, 21 Aug 2008 18:27:22 +0200 [thread overview]
Message-ID: <1219336054-15919-2-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1219336054-15919-1-git-send-email-kraxel@redhat.com>
This patch makes qemu handle signals better. It sets the request_shutdown
flag, making the main_loop exit and qemu taking the usual exit route, with
atexit handlers being called and so on, instead of qemu just being killed
by the signal.
To avoid calling vm_start() from the signal handler main_loop() got an
additional check so qemu_system_shutdown_request() works even when the
vm is in stopped state.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
curses.c | 2 --
sdl.c | 9 +--------
vl.c | 27 +++++++++++++++++++++++++++
3 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/curses.c b/curses.c
index d09eff2..96b6e49 100644
--- a/curses.c
+++ b/curses.c
@@ -350,8 +350,6 @@ void curses_display_init(DisplayState *ds, int full_screen)
atexit(curses_atexit);
#ifndef _WIN32
- signal(SIGINT, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
#if defined(SIGWINCH) && defined(KEY_RESIZE)
/* some curses implementations provide a handler, but we
* want to be sure this is handled regardless of the library */
diff --git a/sdl.c b/sdl.c
index 0edc4a0..84a9d6d 100644
--- a/sdl.c
+++ b/sdl.c
@@ -476,10 +476,8 @@ static void sdl_refresh(DisplayState *ds)
sdl_process_key(&ev->key);
break;
case SDL_QUIT:
- if (!no_quit) {
+ if (!no_quit)
qemu_system_shutdown_request();
- vm_start(); /* In case we're paused */
- }
break;
case SDL_MOUSEMOTION:
if (gui_grab || kbd_mouse_is_absolute() ||
@@ -636,11 +634,6 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
fprintf(stderr, "Could not initialize SDL - exiting\n");
exit(1);
}
-#ifndef _WIN32
- /* NOTE: we still want Ctrl-C to work, so we undo the SDL redirections */
- signal(SIGINT, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
-#endif
ds->dpy_update = sdl_update;
ds->dpy_resize = sdl_resize;
diff --git a/vl.c b/vl.c
index fc5019f..071ee0c 100644
--- a/vl.c
+++ b/vl.c
@@ -7619,6 +7619,8 @@ static int main_loop(void)
timeout = 0;
}
} else {
+ if (shutdown_requested)
+ break;
timeout = 10;
}
#ifdef CONFIG_PROFILER
@@ -8183,6 +8185,26 @@ static BOOL WINAPI qemu_ctrl_handler(DWORD type)
#define MAX_NET_CLIENTS 32
+#ifndef _WIN32
+
+static void termsig_handler(int signal)
+{
+ qemu_system_shutdown_request();
+}
+
+void termsig_setup(void)
+{
+ struct sigaction act;
+
+ memset(&act, 0, sizeof(act));
+ act.sa_handler = termsig_handler;
+ sigaction(SIGINT, &act, NULL);
+ sigaction(SIGHUP, &act, NULL);
+ sigaction(SIGTERM, &act, NULL);
+}
+
+#endif
+
int main(int argc, char **argv)
{
#ifdef CONFIG_GDBSTUB
@@ -9071,6 +9093,11 @@ int main(int argc, char **argv)
#endif
}
+#ifndef _WIN32
+ /* must be after terminal init, SDL library changes signal handlers */
+ termsig_setup();
+#endif
+
/* Maintain compatibility with multiple stdio monitors */
if (!strcmp(monitor_device,"stdio")) {
for (i = 0; i < MAX_SERIAL_PORTS; i++) {
--
1.5.5.1
next prev parent reply other threads:[~2008-08-21 16:28 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-21 16:27 [Qemu-devel] [PATCH 00/13] merge some xen bits into qemu Gerd Hoffmann
2008-08-21 16:27 ` Gerd Hoffmann [this message]
2008-08-21 20:11 ` [Qemu-devel] [PATCH 01/13] Handle terminating signals Anthony Liguori
[not found] ` <m2n.s.1KWGbo-001Nr9@chiark.greenend.org.uk>
2008-08-26 10:44 ` Ian Jackson
2008-08-26 12:16 ` Gerd Hoffmann
2008-08-26 12:36 ` Ian Jackson
2008-08-26 12:58 ` Gerd Hoffmann
2008-08-26 17:55 ` Jamie Lokier
2008-08-26 13:17 ` Anthony Liguori
2008-08-26 13:38 ` [Xen-devel] " Ian Jackson
2008-08-26 14:52 ` Avi Kivity
2008-08-26 17:49 ` Jamie Lokier
2008-08-26 15:04 ` Anthony Liguori
2008-08-26 15:08 ` Ian Jackson
2008-08-26 15:20 ` Anthony Liguori
2008-08-26 15:28 ` Ian Jackson
2008-08-26 15:36 ` Anthony Liguori
2008-08-26 17:47 ` Jamie Lokier
2008-08-26 18:03 ` Jamie Lokier
2008-08-26 18:50 ` Anthony Liguori
2008-08-27 9:46 ` Ian Jackson
2008-08-27 16:27 ` Jamie Lokier
2008-08-27 16:35 ` Ian Jackson
2008-08-27 17:55 ` Anthony Liguori
2008-08-27 18:41 ` Jamie Lokier
2008-08-28 9:34 ` Ian Jackson
2008-09-07 2:41 ` Anthony Liguori
2008-08-26 15:36 ` Samuel Thibault
2008-08-26 15:21 ` Anthony Liguori
[not found] ` <m2n.s.1KXzwZ-002RA9@chiark.greenend.org.uk>
2008-08-26 15:23 ` Ian Jackson
2008-08-26 15:29 ` Avi Kivity
[not found] ` <m2n.s.1KY0XT-002RJM@chiark.greenend.org.uk>
2008-08-26 15:38 ` Ian Jackson
2008-08-26 16:12 ` Avi Kivity
2008-08-26 16:14 ` Julian Seward
2008-08-26 16:39 ` Anthony Liguori
2008-08-27 8:05 ` Avi Kivity
2008-08-27 8:49 ` Alan Cox
2008-08-27 9:10 ` Avi Kivity
2008-08-27 9:16 ` Keir Fraser
2008-08-27 9:12 ` Gleb Natapov
[not found] ` <m2n.s.1KXz4u-002Qvq@chiark.greenend.org.uk>
2008-08-26 14:55 ` Ian Jackson
2008-08-21 16:27 ` [Qemu-devel] [PATCH 02/13] add DisplayState->idle Gerd Hoffmann
2008-08-21 16:33 ` [Qemu-devel] " Samuel Thibault
2008-08-21 20:12 ` [Qemu-devel] " Anthony Liguori
2008-08-21 16:27 ` [Qemu-devel] [PATCH 03/13] add container_of() macro to osdep.h Gerd Hoffmann
2008-08-21 20:12 ` Anthony Liguori
2008-08-21 16:27 ` [Qemu-devel] [PATCH 04/13] move GUI_REFRESH_INTERVAL define from vl.c to console.h Gerd Hoffmann
2008-08-21 20:12 ` Anthony Liguori
2008-08-21 16:27 ` [Qemu-devel] [PATCH 05/13] xen: groundwork for xen support Gerd Hoffmann
2008-08-21 20:18 ` Anthony Liguori
2008-08-21 16:27 ` [Qemu-devel] [PATCH 06/13] xen: backend driver core Gerd Hoffmann
2008-08-21 16:27 ` [Qemu-devel] [PATCH 07/13] xen: add console backend driver Gerd Hoffmann
2008-08-21 16:27 ` [Qemu-devel] [PATCH 08/13] xen: add framebuffer " Gerd Hoffmann
2008-08-21 16:27 ` [Qemu-devel] [PATCH 09/13] xen: add block device " Gerd Hoffmann
2008-08-21 16:27 ` [Qemu-devel] [PATCH 10/13] xen: add net " Gerd Hoffmann
2008-08-21 16:27 ` [Qemu-devel] [PATCH 11/13] xen: blk & nic configuration via cmd line Gerd Hoffmann
2008-08-21 16:27 ` [Qemu-devel] [PATCH 12/13] set vnc password from xenstore Gerd Hoffmann
2008-08-21 20:14 ` Anthony Liguori
2008-08-21 20:19 ` [Xen-devel] " Daniel P. Berrange
2008-08-21 20:22 ` Anthony Liguori
2008-08-21 20:26 ` Daniel P. Berrange
2008-08-21 21:34 ` Gerd Hoffmann
2008-08-21 21:48 ` Daniel P. Berrange
2008-08-21 22:36 ` Anthony Liguori
2008-08-24 9:03 ` Avi Kivity
2008-08-22 7:04 ` Gerd Hoffmann
2008-08-22 19:11 ` Jamie Lokier
2008-08-22 19:01 ` Jamie Lokier
2008-08-21 22:34 ` Anthony Liguori
2008-08-22 8:27 ` Gerd Hoffmann
2008-08-24 8:57 ` Avi Kivity
2008-08-24 9:59 ` Jamie Lokier
2008-08-24 10:07 ` Avi Kivity
2008-08-24 12:48 ` Jamie Lokier
2008-08-21 20:59 ` Jamie Lokier
2008-08-21 21:29 ` Gerd Hoffmann
2008-08-26 10:13 ` Ian Jackson
2008-08-21 20:17 ` [Qemu-devel] Re: [Xen-devel] " Daniel P. Berrange
2008-08-21 21:25 ` Gerd Hoffmann
[not found] ` <m2n.s.1KWHfl-001Ntw@chiark.greenend.org.uk>
2008-08-26 10:47 ` Ian Jackson
2008-08-21 16:27 ` [Qemu-devel] [PATCH 13/13] xen: pv domain builder Gerd Hoffmann
[not found] ` <m2n.s.1KWDD7-002TB9@chiark.greenend.org.uk>
2008-08-26 10:31 ` [Qemu-devel] [PATCH 05/13] xen: groundwork for xen support Ian Jackson
2008-08-26 12:34 ` Gerd Hoffmann
2008-08-26 12:57 ` [Xen-devel] " Daniel P. Berrange
2008-08-26 13:20 ` Gerd Hoffmann
2008-08-26 13:23 ` Daniel P. Berrange
2008-08-26 13:33 ` Ian Jackson
2008-08-26 14:14 ` Daniel P. Berrange
2008-08-26 14:31 ` Gerd Hoffmann
2008-08-26 14:40 ` Daniel P. Berrange
2008-08-26 14:49 ` Gerd Hoffmann
2008-08-26 14:53 ` Daniel P. Berrange
2008-08-26 19:24 ` Gerd Hoffmann
2008-08-26 14:53 ` Ian Jackson
2008-08-27 8:51 ` Gerd Hoffmann
2008-08-27 9:53 ` Ian Jackson
2008-08-27 9:56 ` Daniel P. Berrange
2008-08-27 10:00 ` Ian Jackson
2008-08-27 10:23 ` Daniel P. Berrange
2008-08-27 10:37 ` Gerd Hoffmann
2008-08-27 10:44 ` Daniel P. Berrange
2008-08-27 11:01 ` Gerd Hoffmann
[not found] ` <m2n.s.1KXzR5-002R2A@chiark.greenend.org.uk>
2008-08-26 15:05 ` Ian Jackson
2008-08-26 15:09 ` Daniel P. Berrange
2008-08-26 13:24 ` Ian Jackson
2008-08-26 13:50 ` Daniel P. Berrange
[not found] ` <m2n.s.1KWDfC-002TCd@chiark.greenend.org.uk>
[not found] ` <m2n.s.1KWDGv-002TBJ@chiark.greenend.org.uk>
[not found] ` <m2n.s.1KWDEt-002TBA@chiark.greenend.org.uk>
2008-08-26 10:42 ` [Qemu-devel] [PATCH 13/13] xen: pv domain builder Ian Jackson
2008-08-26 10:50 ` [Xen-devel] " Samuel Thibault
2008-08-26 13:43 ` Ian Jackson
2008-08-26 21:00 ` Markus Armbruster
2008-08-26 12:55 ` Gerd Hoffmann
2008-08-26 13:14 ` Ian Jackson
2008-08-26 13:53 ` Gerd Hoffmann
2008-08-26 14:19 ` Ian Jackson
2008-08-26 20:00 ` [Xen-devel] " Gerd Hoffmann
2008-08-27 9:48 ` Ian Jackson
2008-08-26 13:56 ` Gerd Hoffmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1219336054-15919-2-git-send-email-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).