diff --git a/tools/gst-launch.c b/tools/gst-launch.c index 47c0ab80e1..05543f7e13 100644 --- a/tools/gst-launch.c +++ b/tools/gst-launch.c @@ -458,6 +458,10 @@ print_toc_entry (gpointer data, gpointer user_data) g_list_foreach (subentries, print_toc_entry, GUINT_TO_POINTER (indent)); } +#ifdef G_OS_UNIX +static guint signal_watch_id; +#endif + #ifdef G_OS_UNIX /* As the interrupt handler is dispatched from GMainContext as a GSourceFunc * handler, we can react to this by posting a message. */ @@ -475,6 +479,7 @@ intr_handler (gpointer user_data) "message", G_TYPE_STRING, "Pipeline interrupted", NULL))); /* remove signal handler */ + signal_watch_id = 0; return FALSE; } @@ -487,9 +492,6 @@ static EventLoopResult event_loop (GstElement * pipeline, gboolean blocking, gboolean do_progress, GstState target_state) { -#ifdef G_OS_UNIX - guint signal_watch_id; -#endif GstBus *bus; GstMessage *message = NULL; EventLoopResult res = ELR_NO_ERROR; @@ -824,7 +826,8 @@ exit: gst_message_unref (message); gst_object_unref (bus); #ifdef G_OS_UNIX - g_source_remove (signal_watch_id); + if (signal_watch_id > 0) + g_source_remove (signal_watch_id); #endif return res; }