Opened 14 years ago

Closed 14 years ago

#740 closed defect (duplicate)

Segfault when changing channels with DVB

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

Description

This is a dupe of a closed issue. At the end of that thread danielk suggests opening a new ticket if the problem shows up again.

I have this problem on 8095. Just downloaded it and built it fresh.

Here's the gdb log and backtrace:

2005-12-01 22:18:35.402 Invalid file handle when opening /mythtv//1510_20051201221833.mpg.  4 retries remaining.
2005-12-01 22:18:35.903 Invalid file handle when opening /mythtv//1510_20051201221833.mpg.  3 retries remaining.
2005-12-01 22:18:36.344 NVP: prebuffering pause
2005-12-01 22:18:36.405 Invalid file handle when opening /mythtv//1510_20051201221833.mpg.  2 retries remaining.
2005-12-01 22:18:36.907 Invalid file handle when opening /mythtv//1510_20051201221833.mpg.  1 retries remaining.
2005-12-01 22:18:37.246 Prebuffer wait timed out 10 times.
mpegts_read_header: read_packet() failed
2005-12-01 22:18:37.996 AFD Error: Reset(): avformat err(-1) on av_open_input_file call.

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1293968464 (LWP 8956)]
0xb760ad9a in av_read_frame (s=0x0, pkt=0x8da7c80) at utils.c:1089
1089        const int genpts= s->flags & AVFMT_FLAG_GENPTS;
Current language:  auto; currently c
(gdb) bt
#0  0xb760ad9a in av_read_frame (s=0x0, pkt=0x8da7c80) at utils.c:1089
#1  0xb7ab5b95 in AvFormatDecoder::GetFrame (this=0x8bb2860, onlyvideo=0)
    at avformatdecoder.cpp:2061
#2  0xb7a814eb in NuppelVideoPlayer::GetFrame (this=0x8b6db20, onlyvideo=0,
    unsafe=false) at NuppelVideoPlayer.cpp:868
#3  0xb7a88d51 in NuppelVideoPlayer::StartPlaying (this=0x8b6db20)
    at NuppelVideoPlayer.cpp:2325
#4  0xb7a45661 in SpawnDecode (param=0x8b6db20) at tv_play.cpp:188
#5  0xb65bf380 in start_thread () from /lib/tls/libpthread.so.0
#6  0xb645db5e in clone () from /lib/tls/libc.so.6

If there's anything else you need, just ask.

Homer

Change History (7)

comment:1 Changed 14 years ago by anonymous

Resolution: duplicate
Status: newclosed

Dupe of #687.

comment:2 Changed 14 years ago by Dibblah

Resolution: duplicate
Status: closedreopened

Eh? Read the original ticket. Homer is doing _exactly_ what Daniel asked for.

comment:3 Changed 14 years ago by anonymous

Owner: changed from Isaac Richards to danielk
Status: reopenednew

comment:4 Changed 14 years ago by Isaac Richards

Resolution: duplicate
Status: newclosed

No, _you_ read the ticket. #687 is most definitely not a closed issue, and the backtrace here is identical. How is this _not_ a duplicate?

Daniel's 'create a new ticket w/ backtrace' instruction in #687 was referring to a completely different crash.

comment:5 Changed 14 years ago by danielk

Resolution: duplicatefixed

(In [8098]) Closes #740. This should fix the segfault.

The segfault happened because SwitchToProgram?() didn't check for the being errored before resuming playback.

This adds that check in SwitchToProgram?().

It also adds it to the StartPlaying?() loop. This part is just so that an error message gets displayed before we exit.

For an extra level of paranoia this also adds a check for a null context pointer in the packet reading portion of GetFrame?(). This prevents a segfault if GetFrame?() is called when there is no context pointer; so long as there it is reset clearing any buffered packets.

There are still remaining problems in LiveTV that I think are sufficiently canvased by the existing tickets; this just prevents a segfault if we switch to an empty file. Addressing the creation empty files is a seperate issue.

comment:6 Changed 14 years ago by anonymous

Resolution: fixed
Status: closedreopened

Now (r8098) instead of crashing it just barks about "unable to display video" and screen goes black, after restart of FE the channel comes OK.

comment:7 Changed 14 years ago by anonymous

Resolution: duplicate
Status: reopenedclosed
Note: See TracTickets for help on using tickets.