From 0c4e68d5afb47b2e378cf782f289c328c05a11d3 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 25 May 2016 22:54:21 +0200 Subject: major cleanup and refactoring --- src/gstdvbbackend.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/gstdvbbackend.c') diff --git a/src/gstdvbbackend.c b/src/gstdvbbackend.c index afe5246..277d16b 100644 --- a/src/gstdvbbackend.c +++ b/src/gstdvbbackend.c @@ -29,6 +29,8 @@ #include #include +#include +#include #include #include "datatypes.h" @@ -38,6 +40,15 @@ #include "daemon.h" #include "streamer.h" +static gboolean sig_handler_terminate(gpointer user_data) +{ + GMainLoop *loop = (GMainLoop *)user_data; + + log_printf(NOTICE, "signal received, closing application"); + g_main_loop_quit(loop); + return TRUE; +} + static gboolean bus_call(GstBus *bus, GstMessage *msg, gpointer data) { GMainLoop *loop = (GMainLoop *)data; @@ -81,7 +92,7 @@ int main_loop(options_t* opt) log_printf(INFO, "entering main loop"); GMainLoop *loop; - GstElement *pipeline, *source, *sink; + GstElement *pipeline, *source; GstBus *bus; streamer_t streamer; @@ -126,12 +137,13 @@ int main_loop(options_t* opt) log_printf(INFO, "Set State: Playing"); gst_element_set_state(pipeline, GST_STATE_PLAYING); - signal_start(loop); ret = streamer_start(&streamer); if(!ret) { + g_unix_signal_add(SIGHUP, sig_handler_terminate, loop); + g_unix_signal_add(SIGINT, sig_handler_terminate, loop); + g_unix_signal_add(SIGTERM, sig_handler_terminate, loop); g_main_loop_run(loop); streamer_stop(&streamer); - signal_stop(); } log_printf(NOTICE, "Stopping pipeline"); @@ -229,7 +241,6 @@ int main(int argc, char* argv[]) fclose(pid_file); } - signal_init(); gst_init(NULL, NULL); const gchar *nano_str; guint major, minor, micro, nano; -- cgit v1.2.3