summaryrefslogtreecommitdiff
path: root/gst-libs/gst/transcoder
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@igalia.com>2020-11-19 17:55:10 -0300
committerThibault Saunier <tsaunier@igalia.com>2020-11-30 15:16:01 -0300
commitb3544e24baf06e265e73c850adf35a410e37c617 (patch)
treeb70a2e96af1bbb5af34ea78a75539acaef4d3906 /gst-libs/gst/transcoder
parent9d890c152e212b59bb8b583c2e3dea7aa50dc61d (diff)
downloadgstreamer-plugins-bad-b3544e24baf06e265e73c850adf35a410e37c617.tar.gz
transcoder: Handle the case where several errors are posted
There were cases where the loop was already destroyed when we were receiving the following message.
Diffstat (limited to 'gst-libs/gst/transcoder')
-rw-r--r--gst-libs/gst/transcoder/gsttranscoder.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/gst-libs/gst/transcoder/gsttranscoder.c b/gst-libs/gst/transcoder/gsttranscoder.c
index 2da8c9c48..ec2eacbdd 100644
--- a/gst-libs/gst/transcoder/gsttranscoder.c
+++ b/gst-libs/gst/transcoder/gsttranscoder.c
@@ -1079,13 +1079,20 @@ _error_cb (GstTranscoder * self, GError * error, GstStructure * details,
{
if (data->error == NULL)
g_propagate_error (&data->error, error);
- g_main_loop_quit (data->loop);
+
+ if (data->loop) {
+ g_main_loop_quit (data->loop);
+ data->loop = NULL;
+ }
}
static void
_done_cb (GstTranscoder * self, RunSyncData * data)
{
- g_main_loop_quit (data->loop);
+ if (data->loop) {
+ g_main_loop_quit (data->loop);
+ data->loop = NULL;
+ }
}
/**
@@ -1110,6 +1117,9 @@ gst_transcoder_run (GstTranscoder * self, GError ** error)
if (!data.error)
g_main_loop_run (data.loop);
+ g_signal_handlers_disconnect_by_func (self, _error_cb, &data);
+ g_signal_handlers_disconnect_by_func (self, _done_cb, &data);
+
if (data.error) {
if (error)
g_propagate_error (error, data.error);