vaapidecode: unlock condition variables before shutting down the element
authorSebastian Dröge <sebastian@centricular.com>
Tue, 12 Aug 2014 10:00:03 +0000 (13:00 +0300)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 20 Aug 2014 15:25:07 +0000 (17:25 +0200)
Otherwise threads might wait for them, causing the shutdown of the element
to deadlock on the streaming thread.

https://bugzilla.gnome.org/show_bug.cgi?id=734616

gst/vaapi/gstvaapidecode.c

index 15620a2..aab99ad 100644 (file)
@@ -929,7 +929,13 @@ gst_vaapidecode_change_state (GstElement * element, GstStateChange transition)
 
     switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_READY:
+        g_mutex_lock(&decode->decoder_mutex);
+        decode->decoder_finish = TRUE;
+        g_cond_signal(&decode->decoder_finish_done);
+        g_cond_signal(&decode->decoder_ready);
+        g_mutex_unlock(&decode->decoder_mutex);
         gst_pad_stop_task(GST_VAAPI_PLUGIN_BASE_SRC_PAD(decode));
+        decode->decoder_finish = FALSE;
         break;
     default:
         break;