GNOME Bugzilla – Bug 120127
Improve handling of state change events.
Last modified: 2004-12-22 21:47:04 UTC
Currently, when a state change event cannot enter an element that is blocked, for example, a network source element waiting for data. This is the case even if the element is contained in a dedicated thread. Let us see the case when the element has a dedicated thread. The thread bin receives the state change event in gst_thread_change_state. This function calls gst_catch_thread, and therefore it is blocked until the thread is in the main event loop. This means that the element author should refrain from making a plugin blocking. This goes against the philosophy of GStreamer of putting the complexity in the infraestructure rather than in each element. I suggest to remove gst_catch_thread; instead insuring that the action of changing the state is thread safe. Ramon.
This was a misunderstanding on my part. The solution is simply that a blocking element should implement release_locks. Thanks to information provided by Company.