Commit 8d963e6a authored by Jes Sorensen's avatar Jes Sorensen Committed by Blue Swirl

Move main signal handler setup to os specificfiles.

Move main signal handler setup to os specific files.
Signed-off-by: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Acked-by: default avatarJuan Quintela <quintela@redhat.com>
Acked-by: default avatarRichard Henderson <rth@redhat.com>
Signed-off-by: default avatarBlue Swirl <blauwirbel@gmail.com>
parent fe98ac14
......@@ -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);
}
......@@ -30,4 +30,6 @@ static inline void os_host_main_loop_wait(int *timeout)
{
}
void os_setup_signal_handling(void);
#endif
......@@ -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
......@@ -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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment