element: Don't hold state lock all the time while sending an event
authorSebastian Dröge <sebastian@centricular.com>
Thu, 10 Dec 2015 09:35:05 +0000 (11:35 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 10 Dec 2015 09:35:05 +0000 (11:35 +0200)
This lock seems to exist only to prevent elements from changing states while
events are being processed. However events are going to be processed
nonetheless in those elements if sent directly via pads, so protection must
already be implemented inside the elements for event handling if it is needed.

As such having the lock here is not very useful and is actually causing
various deadlocks in different situations as described in
https://bugzilla.gnome.org/show_bug.cgi?id=744040

gst/gstelement.c

index 3828277..832ac27 100644 (file)
@@ -1566,13 +1566,11 @@ gst_element_send_event (GstElement * element, GstEvent * event)
 
   oclass = GST_ELEMENT_GET_CLASS (element);
 
-  GST_STATE_LOCK (element);
   if (oclass->send_event) {
     GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "send %s event on element %s",
         GST_EVENT_TYPE_NAME (event), GST_ELEMENT_NAME (element));
     result = oclass->send_event (element, event);
   }
-  GST_STATE_UNLOCK (element);
 
   return result;
 }