summaryrefslogtreecommitdiff
path: root/src/gstdvbbackend.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gstdvbbackend.c')
-rw-r--r--src/gstdvbbackend.c19
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;