aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJes Sorensen <Jes.Sorensen@redhat.com>2010-06-10 11:42:22 +0200
committerBlue Swirl <blauwirbel@gmail.com>2010-06-12 08:49:14 +0300
commit8d963e6ae700b2a46dd3a2bde5d1e5f925702f47 (patch)
treee90c19d6fea1e95440bae1f8d06dfb4118fd5a4e
parentfe98ac146109e307d7e19486dcfebbc89259d34d (diff)
Move main signal handler setup to os specificfiles.
Move main signal handler setup to os specific files. Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Acked-by: Juan Quintela <quintela@redhat.com> Acked-by: Richard Henderson <rth@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
-rw-r--r--os-posix.c27
-rw-r--r--qemu-os-posix.h2
-rw-r--r--qemu-os-win32.h3
-rw-r--r--vl.c33
4 files changed, 33 insertions, 32 deletions
diff --git a/os-posix.c b/os-posix.c
index 948f662e9..01dbec2e3 100644
--- a/os-posix.c
+++ b/os-posix.c
@@ -26,6 +26,8 @@
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
+#include <sys/types.h>
+#include <sys/wait.h>
/* Needed early for CONFIG_BSD etc. */
#include "config-host.h"
@@ -39,3 +41,28 @@ void os_setup_early_signal_handling(void)
act.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &act, NULL);
}
+
+static void termsig_handler(int signal)
+{
+ qemu_system_shutdown_request();
+}
+
+static void sigchld_handler(int signal)
+{
+ waitpid(-1, NULL, WNOHANG);
+}
+
+void os_setup_signal_handling(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);
+
+ act.sa_handler = sigchld_handler;
+ act.sa_flags = SA_NOCLDSTOP;
+ sigaction(SIGCHLD, &act, NULL);
+}
diff --git a/qemu-os-posix.h b/qemu-os-posix.h
index 96d1036b4..ff5adb1b2 100644
--- a/qemu-os-posix.h
+++ b/qemu-os-posix.h
@@ -30,4 +30,6 @@ static inline void os_host_main_loop_wait(int *timeout)
{
}
+void os_setup_signal_handling(void);
+
#endif
diff --git a/qemu-os-win32.h b/qemu-os-win32.h
index 4d1cac852..e7e2ee3ab 100644
--- a/qemu-os-win32.h
+++ b/qemu-os-win32.h
@@ -41,4 +41,7 @@ int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
void os_host_main_loop_wait(int *timeout);
+
+static inline void os_setup_signal_handling(void) {}
+
#endif
diff --git a/vl.c b/vl.c
index 4fcedbfeb..807da7b97 100644
--- a/vl.c
+++ b/vl.c
@@ -1986,35 +1986,6 @@ static int balloon_parse(const char *arg)
return -1;
}
-#ifndef _WIN32
-
-static void termsig_handler(int signal)
-{
- qemu_system_shutdown_request();
-}
-
-static void sigchld_handler(int signal)
-{
- waitpid(-1, NULL, WNOHANG);
-}
-
-static void sighandler_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);
-
- act.sa_handler = sigchld_handler;
- act.sa_flags = SA_NOCLDSTOP;
- sigaction(SIGCHLD, &act, NULL);
-}
-
-#endif
-
#ifdef _WIN32
/* Look for support files in the same directory as the executable. */
static char *find_datadir(const char *argv0)
@@ -3556,10 +3527,8 @@ int main(int argc, char **argv, char **envp)
cpu_synchronize_all_post_init();
-#ifndef _WIN32
/* must be after terminal init, SDL library changes signal handlers */
- sighandler_setup();
-#endif
+ os_setup_signal_handling();
set_numa_modes();