transcoder: Handle the case where several errors are posted
authorThibault Saunier <tsaunier@igalia.com>
Thu, 19 Nov 2020 20:55:10 +0000 (17:55 -0300)
committerThibault Saunier <tsaunier@igalia.com>
Mon, 30 Nov 2020 18:16:01 +0000 (15:16 -0300)
There were cases where the loop was already destroyed when we were
receiving the following message.

gst-libs/gst/transcoder/gsttranscoder.c

index 2da8c9c..ec2eacb 100644 (file)
@@ -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);