Mailing List Archive

mythtv/master commit: fd5e33a69 by Mark Kendall (mark-kendall)
Author: Mark Kendall <mkendall@mythtv.org>
Change Date: 2011-05-18T08:41:49-07:00
Push Date: 2011/05/18 08:42:02 -0700
Repository: mythtv
Branch: master
New Revision: fd5e33a69b630aa9c0b94a8c2dd7693f02726316
Changeset: https://github.com/MythTV/mythtv/commit/fd5e33a69

Log:

DVDRingBuffer: Unlock the ring buffer when waiting on state changes.

The DVD ringbuffer does not use the read ahead thread and hence holding
the writelock during safe_read is not strictly necessary (see
RingBuffer::ReadPriv). DVDRingBuffer::safe_read can also hold that lock
for tens of seconds when, for example, displaying a still frame (the dvd
device simply returns specific events, but not data, until it is told to
skip the still frame).

Under normal operation this is not a problem but events received from
external sources (such as network control) can trigger code that tries
to lock the ringbuffer from the main UI thread (e.g.
RingBuffer::GetFilename). The lock is not obtained, event processing in
the main thread is blocked and the wait state in the ringbuffer thread
is not cleared - and the frontend deadlocks as a result.

The solution is to release the lock while sleeping within
DVDRingBuffer::safe_read to allow other threads to obtain the lock
temporarily. I've also added a warning message should the read ahead
thread be running in the DVD ringbuffer.

Refs #9780

Modified:

mythtv/libs/libmythtv/dvdringbuffer.cpp

_______________________________________________
mythtv-firehose mailing list
mythtv-firehose@mythtv.org
http://www.mythtv.org/mailman/listinfo/mythtv-firehose