rtmp2src: workaround a GLib race when destroying a GMainContext/GSource
authorMatthew Waters <matthew@centricular.com>
Tue, 13 Jul 2021 11:38:10 +0000 (21:38 +1000)
committerMatthew Waters <matthew@centricular.com>
Thu, 15 Jul 2021 04:10:04 +0000 (14:10 +1000)
https://gitlab.gnome.org/GNOME/glib/-/issues/803

Basically, if destruction of a GSource and its associated GMainContext are
not synchronised, Then the GSource destruction can access freed
GMainContext resources and cause a crash.  This is not super common but
can happen.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2405>

gst/rtmp2/gstrtmp2src.c

index 6cad882..960e2da 100644 (file)
@@ -691,11 +691,14 @@ gst_rtmp2_src_create (GstBaseSrc * src, guint64 offset, guint size,
   return GST_FLOW_OK;
 
 out:
-  g_mutex_unlock (&self->lock);
   if (timeout) {
     g_source_destroy (timeout);
     g_source_unref (timeout);
   }
+  /* Keep the unlock after the destruction of the timeout source to workaround
+   * https://gitlab.gnome.org/GNOME/glib/-/issues/803
+   */
+  g_mutex_unlock (&self->lock);
 
   return ret;
 }