Please sign in to comment.
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
- Loading branch information...
Showing with 12 additions and 0 deletions.