Opened 13 years ago

Closed 13 years ago

#1908 closed defect (fixed)

mythfrontend: SIGSEGV when cancelling in-progress channel change in live TV

Reported by: malcolm-mythtv-dev@… Owned by: danielk
Priority: minor Milestone: 0.20
Component: mythtv Version: head
Severity: high Keywords:
Cc: Ticket locked: no

Description

Using r9974 from /branches/mythtv-eit.
Compiled for x86-64 with ./configure --enable-dvb --compile-type=debug --disable-ccache.

I can reproduce a segfault in mythfrontend:

  1. Watch Live TV (I'm using a DVB-T source).
  2. Start a channel change from one channel to another (e.g. Channel Down, OK).
  3. Before the change has completed, cancel back (Escape) to the main menu.
  4. SIGSEGV.

It is much easier to reproduce this when the two channels are on the same multiplex, because otherwise you need to wait for the lock to succeed. I don't actually think the problem is related to tuning, though - it seems like we're trying to shut down a TV object that doesn't have a player associated with it.

Crash signature is

#0  0x00002b1762f0415a in NuppelVideoPlayer::getAudioOutput (this=0x0) at NuppelVideoPlayer.h:209
209	    AudioOutput *getAudioOutput(void)         { return audioOutput; }
#1  0x00002b1762eed50c in TV::UnMute (this=0xd094e0) at tv_play.cpp:5090
#2  0x00002b1763195faf in TV::qt_invoke (this=0xd094e0, _id=4, _o=0x7fff48486f40) at moc_tv_play.cpp:109

Backtrace and log attached. I still have the core file, let me know if I can provide anything else. (The backtrace is slightly edited: gdb traced back hundreds of frames past the clone() calls on each thread and complained about stack corruption, but I think this is a fault in gdb rather than an actual problem).

Attachments (2)

mythfrontend-debug.log.8677 (3.4 KB) - added by malcolm-mythtv-dev@… 13 years ago.
mythfrontend log
gdb.txt (28.5 KB) - added by malcolm-mythtv-dev@… 13 years ago.
Full backtrace

Download all attachments as: .zip

Change History (6)

Changed 13 years ago by malcolm-mythtv-dev@…

Attachment: mythfrontend-debug.log.8677 added

mythfrontend log

Changed 13 years ago by malcolm-mythtv-dev@…

Attachment: gdb.txt added

Full backtrace

comment:1 Changed 13 years ago by danielk

Milestone: 0.20
Severity: mediumhigh

comment:2 Changed 13 years ago by anonymous

This may have been fixed by [10029]. I'll see if I can reproduce this problem after I've updated to a newer version.

comment:3 Changed 13 years ago by malcolm-mythtv-dev@…

Still able to reproduce using r10247 from trunk. Crash signature appears to be the same.

comment:4 Changed 13 years ago by danielk

Resolution: fixed
Status: newclosed

(In [10261]) Closes #1908. Fixes SEGFAULT by adding a null pointer check to TV::UnMute?().

This is on a Qt Timer and can be triggered at the wrong time during a channel change. This will fix the segfault, but there may still be a problem with using the timer like this. It is possible that sound will not be unmuted after a channel change, though reading the code it looks like the unmute is done directly as well when needed.

Note: See TracTickets for help on using tickets.