]> mj.ucw.cz Git - ursary.git/blobdiff - ursaryd.c
Init script and related fixes
[ursary.git] / ursaryd.c
index fb6f04bfd25e87887488743c5402b11be2f4fc28..dda13680f53329d721f890fbbb1329bf458fbc05 100644 (file)
--- a/ursaryd.c
+++ b/ursaryd.c
@@ -14,6 +14,7 @@
 #include <ucw/opt.h>
 #include <ucw/stkstring.h>
 
+#include <signal.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -644,19 +645,6 @@ void notify_touch(int rotary, int on UNUSED)
 
 /*** Main entry point ***/
 
-static void daemon_body(struct daemon_params *dp UNUSED)
-{
-  main_init();
-  update_timer.handler = do_update;
-
-  noct_init();
-  pulse_init();
-  mpd_init();
-
-  msg(L_INFO, "Ursary daemon starting");
-  main_loop();
-}
-
 static int debug;
 
 static struct opt_section options = {
@@ -670,6 +658,32 @@ static struct opt_section options = {
   }
 };
 
+static void sigterm_handler(struct main_signal *ms UNUSED)
+{
+  main_shut_down();
+}
+
+static void daemon_body(struct daemon_params *dp)
+{
+  main_init();
+  update_timer.handler = do_update;
+
+  noct_init();
+  pulse_init();
+  mpd_init();
+
+  static struct main_signal term_sig = {
+    .signum = SIGTERM,
+    .handler = sigterm_handler,
+  };
+  signal_add(&term_sig);
+
+  msg(L_INFO, "Ursary daemon starting");
+  main_loop();
+  msg(L_INFO, "Ursary daemon shut down");
+  daemon_exit(dp);
+}
+
 int main(int argc UNUSED, char **argv)
 {
   opt_parse(&options, argv+1);
@@ -683,11 +697,8 @@ int main(int argc UNUSED, char **argv)
   };
   daemon_init(&dp);
 
-  if (debug)
-    {
-      log_init(argv[0]);
-    }
-  else
+  log_init(argv[0]);
+  if (!debug)
     {
       struct log_stream *ls = log_new_syslog("daemon", LOG_PID);
       log_set_default_stream(ls);