Opened 14 years ago

Closed 14 years ago

#262 closed defect (fixed)

Exiting LiveTV not possible from an off-air channel at startup

Reported by: danielk Owned by: danielk
Priority: major Milestone: 0.19
Component: mythtv Version: head
Severity: medium Keywords:
Cc: Ticket locked: no

Description (last modified by danielk)

This is related to #277, but is different.

If we are on an off-air channel when we start-up keys are processed. So there is a workaround to this problem, change to an on-air channel and then exit.

Change History (2)

comment:1 Changed 14 years ago by danielk

Description: modified (diff)
Priority: blockermajor
Severity: highmedium
Status: newassigned
Summary: Exiting LiveTV not possible when there is no signal on the first channelExiting LiveTV not possible from an off-air channel at startup

comment:2 Changed 14 years ago by danielk

Resolution: fixed
Status: assignedclosed

(In [7177]) Fixes #262.

There were essentially two problems. One was that hitting ESC while the signal OSD was on screen just exited the OSD, not the player. Then the OSD reappeared once there was a new signal message. This is why it appeared to be quiting but then it didn't quit.

The second problem was that AbortStartRecorderThread?() was called after "QMutexLocker lock(&stateChangeLock)" in HandleStateChange?(), this meant that if you hit ESC twice you still didn't exit because the StartRecorderPost?() needed access to lock the stateChangeLock before it exited. Since HandleStateChange?() wouldn't release the lock until StartRecorderPost?() exited, we had a classic deadlock.

I also fixed two other somewhat related problems:

1/ HandleStateChange? did not reset the changeState to

false after a Null transition. This created a great deal of chatter until you issued next changedStates.

2/ We did not grab the TV::osdlock before deleting the

nvp. This presents a problem if we try check GetOSD() for null and then use after the nvp is deleted... (This is still a problem with anyone using GetOSD() outside the TV event loop, without grabbing a TV::osdlock. The UDPNotify class comes to mind.)

Note: See TracTickets for help on using tickets.