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 3828277ef113bbbb04d57ede429e8fc14a06d2fe..832ac27a1ccbf510c5cb2db911d77623081839dc 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;
 }