diff options
author | Thibault Saunier <tsaunier@igalia.com> | 2020-11-19 17:55:10 -0300 |
---|---|---|
committer | Thibault Saunier <tsaunier@igalia.com> | 2020-11-30 15:16:01 -0300 |
commit | b3544e24baf06e265e73c850adf35a410e37c617 (patch) | |
tree | b70a2e96af1bbb5af34ea78a75539acaef4d3906 /gst-libs/gst/transcoder | |
parent | 9d890c152e212b59bb8b583c2e3dea7aa50dc61d (diff) | |
download | gstreamer-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.c | 14 |
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); |