#include <ucw/opt.h>
#include <ucw/stkstring.h>
+#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*** 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 = {
}
};
+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);
};
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);