[gst-devel] A hang inside gst_task_join()
Wim Taymans
wim.taymans at gmail.com
Sat Jun 5 09:52:57 CEST 2010
On Fri, 2010-06-04 at 19:33 -0700, Loc Nguyen wrote:
> Hi,
>
> We've found a rare hang that occurs on unreferencing a pipeline. We set
> the pipeline to GST_STATE_NULL then unref it. The hang occurs inside of
> gst_task_join(). I'm happy to debug and fix it, but I am trying to
> understand the intent of some code here. Inside of gst_task_join(),
> there is the following code:
>
> task->state = GST_TASK_STOPPED;
> /* signal the state change for when it was blocked in PAUSED. */
> GST_TASK_SIGNAL (task);
> /* we set the running flag when pushing the task on the thread pool.
> * This means that the task function might not be called when we try
> * to join it here. */
> while (G_LIKELY (task->running))
> GST_TASK_WAIT (task);
>
> It so happens the task is already running so the join function waits on
> the task to finish. However, the task is running gst_queue_loop() and
> waiting for queue->item_add cond variable. There must be some intent on
> signaling the queue so it can break out of this wait. I just cannot
> figure out how gstreamer intended to do this. Any ideas? Btw, this
When the queue is asked to do a state change to READY, it first sets its
state to flushing and then it signals the item_add cond variable (see
gst_queue_src_activate_push(). This makes the task go into paused where
the core does a join on it.
> hang does not always occur. It's rare, but on my specific machine, it
> occurs frequent enough for me to trace it down to this.
I have no idea why you would see this.
Wim
>
> Thanks,
> -Loc
>
> ------------------------------------------------------------------------------
> ThinkGeek and WIRED's GeekDad team up for the Ultimate
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
> lucky parental unit. See the prize list and enter to win:
> http://p.sf.net/sfu/thinkgeek-promo
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
More information about the gstreamer-devel
mailing list