GST_DEBUG_ENTER ("(%d,'%s')", argc, name);
+ gst_object_ref (GST_OBJECT (element));
do {
GST_DEBUG (GST_CAT_DATAFLOW, "calling loopfunc %s for element %s",
GST_DEBUG_FUNCPTR_NAME (element->loopfunc), name);
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element));
GST_FLAG_UNSET (element, GST_ELEMENT_COTHREAD_STOPPING);
+ /* due to oddities in the cothreads code, when this function returns it will
+ * switch to the main cothread. thus, we need to unlock the current element. */
+ if (SCHED (element)) {
+ if (SCHED (element)->current && SCHED (element)->current->post_run_func) {
+ SCHED (element)->current->post_run_func (SCHED (element)->current);
+ }
+ SCHED (element)->current = NULL;
+ }
+
GST_DEBUG_LEAVE ("(%d,'%s')", argc, name);
+ gst_object_unref (GST_OBJECT (element));
return 0;
}