blob: 2e57440928170cf6b8935813d8c38cacc7a0f950 [file] [log] [blame]
diff --git a/src/ck-sysdeps-unix.c b/src/ck-sysdeps-unix.c
index 0001b6b..bcdfb21 100644
--- a/src/ck-sysdeps-unix.c
+++ b/src/ck-sysdeps-unix.c
@@ -267,7 +267,13 @@ ck_wait_for_active_console_num (int console_fd,
g_debug ("Interrupted waiting for native console %d activation: %s",
num,
errmsg);
+#if !defined(__FreeBSD__)
+ /* We don't want to retry on FreeBSD since getting
+ * EINTR means we are terminating, and we don't want
+ * to keep restarting our active VT check.
+ */
goto again;
+#endif
} else {
g_warning ("Error waiting for native console %d activation: %s",
num,
diff --git a/src/main.c b/src/main.c
index 11b6f2e..af2998b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -245,6 +245,27 @@ setup_debug_log_signals (void)
}
static void
+terminate (int sig __unused)
+{
+ return;
+}
+
+static void
+setup_termination_signals (void)
+{
+ struct sigaction sa;
+
+ sa.sa_handler = terminate;
+ sigemptyset (&sa.sa_mask);
+ sa.sa_flags = 0;
+
+ sigaction (SIGTERM, &sa, NULL);
+ sigaction (SIGQUIT, &sa, NULL);
+ sigaction (SIGINT, &sa, NULL);
+ sigaction (SIGHUP, &sa, NULL);
+}
+
+static void
setup_debug_log (gboolean debug)
{
ck_log_init ();
@@ -300,6 +321,8 @@ main (int argc,
setup_debug_log (debug);
+ setup_termination_signals ();
+
connection = get_system_bus ();
if (connection == NULL) {
goto out;
diff --git a/src/test-vt-monitor.c b/src/test-vt-monitor.c
index c445865..e31b24e 100644
--- a/src/test-vt-monitor.c
+++ b/src/test-vt-monitor.c
@@ -30,6 +30,7 @@
#include <fcntl.h>
#include <pwd.h>
#include <string.h>
+#include <signal.h>
#include <errno.h>
#include <locale.h>
@@ -47,6 +48,12 @@ activated_cb (CkVtMonitor *monitor,
g_message ("VT %u activated", num);
}
+static void
+terminate (int sig __unused)
+{
+ return;
+}
+
int
main (int argc, char **argv)
{
@@ -55,12 +62,22 @@ main (int argc, char **argv)
GError *error;
guint num;
gboolean res;
+ struct sigaction sa;
if (! g_thread_supported ()) {
g_thread_init (NULL);
}
g_type_init ();
+ sa.sa_handler = terminate;
+ sigemptyset (&sa.sa_mask);
+ sa.sa_flags = 0;
+
+ sigaction (SIGINT, &sa, NULL);
+ sigaction (SIGTERM, &sa, NULL);
+ sigaction (SIGQUIT, &sa, NULL);
+ sigaction (SIGHUP, &sa, NULL);
+
if (! ck_is_root_user ()) {
g_warning ("Must be run as root");
exit (1);