diff options
Diffstat (limited to 'src/gstdvbbackend.c')
-rw-r--r-- | src/gstdvbbackend.c | 19 |
1 files changed, 15 insertions, 4 deletions
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 <string.h> #include <sys/select.h> +#include <glib.h> +#include <glib-unix.h> #include <gst/gst.h> #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; |