+
+static void quit_signal_handler(int sig)
+{
+ debug_print("Quitting on signal %d\n", sig);
+ clean_quit();
+}
+
+static void install_basic_sighandlers()
+{
+ sigset_t mask;
+ struct sigaction act;
+
+ sigemptyset(&mask);
+
+#ifdef SIGTERM
+ sigaddset(&mask, SIGTERM);
+#endif
+#ifdef SIGINT
+ sigaddset(&mask, SIGINT);
+#endif
+
+ act.sa_handler = quit_signal_handler;
+ act.sa_mask = mask;
+ act.sa_flags = 0;
+
+#ifdef SIGTERM
+ sigaction(SIGTERM, &act, 0);
+#endif
+#ifdef SIGINT
+ sigaction(SIGINT, &act, 0);
+#endif
+
+ sigprocmask(SIG_UNBLOCK, &mask, 0);
+}