From: Michael R. <mr...@us...> - 2004-03-22 17:37:22
|
Hi Thibaut, Hi Frantisek, Hi Daniel, > > In the meantime, could someone who knows nbc tell me, when in the decoder > > loop this thing can jump in? Only in fifo->get() or are there other > > places? > > There is callbacks for: > fifo->alloc, > fifo->get, > fifo->put. > > There should be only fifo->get calls in the decoder loop. I think I found the problem. After all, it is surprisingly obvious: * decoder gets interrupted somewhere during decoding (holding the ticket) * demuxer puts the next buffer * nbc jumps in and wants to pause * the ticket is revoked * decoder is woken up, leaves decoding * decoder falls into buf->free_buffer() (sill holding the ticket) * decoder cannot get the fifo mutex, because it is hold by the demuxer * demuxer and decoder wait for one another Solution: Move the ticket acquiring deeper inside the decoder loops, so that free_buffer() is never called with a ticket held. Could you try the attached patch? Michael -- "In God we trust, all others we monitor." -NSA, Intercept Operators's motto, 1970 |