media: Fix race condition around finish_unprepare() if called multiple time
authorKseniia Vasilchuk <vasilchukkseniia@gmail.com>
Tue, 25 Oct 2016 12:41:28 +0000 (15:41 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 1 Dec 2016 14:39:00 +0000 (16:39 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=755329

gst/rtsp-server/rtsp-media.c

index 52e6757..4858b13 100644 (file)
@@ -3050,6 +3050,10 @@ finish_unprepare (GstRTSPMedia * media)
   g_rec_mutex_unlock (&priv->state_lock);
   set_state (media, GST_STATE_NULL);
   g_rec_mutex_lock (&priv->state_lock);
+
+  if (priv->status != GST_RTSP_MEDIA_STATUS_UNPREPARING)
+    return;
+
   remove_fakesink (priv);
 
   for (i = 0; i < priv->streams->len; i++) {
@@ -3168,6 +3172,7 @@ gst_rtsp_media_unprepare (GstRTSPMedia * media)
     if (klass->unprepare)
       success = klass->unprepare (media);
   } else {
+    gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_UNPREPARING);
     finish_unprepare (media);
   }
   g_rec_mutex_unlock (&priv->state_lock);