[mythtv] [BT] current-cvs frontend crash on recorded-shows screen
Jason Hoos
jhoos at thwack.net
Fri Jan 16 03:10:39 EST 2004
> On Friday 16 January 2004 12:31 am, Derek Atkins wrote:
> > My wife was watching tv tonight while I was out and the frontend
> > crashed with a SEGV. She said she was watching livetv, then went to
> > watch a recorded show, finished that, left it on the "play recorded
> > shows" screen for a while as she did other stuff, and then came back
> > to a crashed frontend. I'm setup to use the PVR-350 output device.
> > Here is the backtrace...
>
> Hmm.. Was it on the screen long enough for it to reach the
> end of the
> recording?
His backtrace looks very similar to one I was trying to figure out a week or
two ago, and in my case it was caused at the end of a recording. I noticed
it after having recorded a one-minute test clip for other reasons; if I left
that clip selected on the playback screen, the frontend would crash 4 out of
5 times while trying to loop from the end to the beginning of the clip.
I wasn't able to figure out the cause of the problem, but from what I did
see, it seemed like some thread deleted a buffer out from underneath the
'cmmx_argb323' function in playbackbox.cpp (called from updateVideo line 546
or so). The interesting thing that I noticed was this - right before the
"convert" call, I put in a printf that displayed the current values of
"frame" and "frame->buf". Right before the segfault occurs, the value that
got printed out for frame->buf matched what the backtrace said the second
argument to mmx_argb323 was. However, doing a 'print frame->buf' at the GDB
prompt after the segfault showed that frame->buf had been reset to NULL.
I just reran that clip and double-checked all this. I've attached another
backtrace including the aforementioned 'print' if you want to look at it.
Jason
-------------- next part --------------
[mpeg2video @ 0x825b538]ac-tex damaged at 20 22
[mpeg2video @ 0x825b538]concealing errors
[mpeg2video @ 0x825b538]Warning MVs not available
[16384] playbackbox: frame=87ae9c8 frame->buf=46c36008, nvp->isPlaying=1
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 16384 (LWP 26739)]
0x40266ab9 in mmx_yuv2rgb (py=0x46d0e398 <Address 0x46d0e398 out of bounds>,
pu=0x46d4d0d0 <Address 0x46d4d0d0 out of bounds>,
pv=0x46d854d0 <Address 0x46d854d0 out of bounds>) at yuv2rgb.cpp:62
62 movd_m2r (*pu, mm0); // mm0 = 00 00 00 00 u3 u2 u1 u0
(gdb) thread apply all bt full
Thread 3 (Thread 16386 (LWP 26743)):
#0 0x4107e7cb in read () from /lib/i686/libpthread.so.0
No symbol table info available.
#1 0x412d730c in __JCR_LIST__ () from /usr/lib/liblirc_client.so.0
No symbol table info available.
#2 0x40720880 in LircClient::Process() (this=0x8242608) at lirc.cpp:58
code = 0x0
ir = 0x0
ret = 0
#3 0x407039a0 in SpawnLirc (param=0x8229d30) at mythdialogs.cpp:38
main_window = (MythMainWindow *) 0x8229d30
config_file = {static null = {
static null = <same as static member of an already seen type>,
d = 0x8187b40, static shared_null = 0x8187b40}, d = 0x8249080,
static shared_null = 0x8187b40}
program = {static null = {
static null = <same as static member of an already seen type>,
d = 0x8187b40, static shared_null = 0x8187b40}, d = 0x8236108,
static shared_null = 0x8187b40}
cl = (class LircClient *) 0x8242608
#4 0x41079811 in pthread_start_thread () from /lib/i686/libpthread.so.0
No symbol table info available.
#5 0x41079915 in pthread_start_thread_event () from /lib/i686/libpthread.so.0
No symbol table info available.
Thread 2 (Thread 32769 (LWP 26742)):
#0 0x41275537 in poll () from /lib/i686/libc.so.6
No symbol table info available.
#1 0x4107896e in __pthread_manager () from /lib/i686/libpthread.so.0
No symbol table info available.
#2 0x41078bbb in __pthread_manager_event () from /lib/i686/libpthread.so.0
No symbol table info available.
Thread 1 (Thread 16384 (LWP 26739)):
#0 0x40266ab9 in mmx_yuv2rgb (
py=0x46d0e398 <Address 0x46d0e398 out of bounds>,
pu=0x46d4d0d0 <Address 0x46d4d0d0 out of bounds>,
pv=0x46d854d0 <Address 0x46d854d0 out of bounds>) at yuv2rgb.cpp:62
mmx_80w = {q = 36029346783166592, uq = 36029346783166592, d = {
8388736, 8388736}, ud = {8388736, 8388736}, w = {128, 128, 128, 128},
uw = {128, 128, 128, 128}, b = "\200\0\200\0\200\0\200",
ub = "\200\0\200\0\200\0\200", s = {1.17551229e-38, 1.17551229e-38}}
mmx_U_green = {q = -901296628122651779, uq = 17545447445586899837,
d = {-209849475, -209849475}, ud = {4085117821, 4085117821}, w = {-3203,
-3203, -3203, -3203}, uw = {62333, 62333, 62333, 62333}, b = "}ó}ó}ó}ó",
ub = "}ó}ó}ó}ó", s = {-2.01200811e+31, -2.01200811e+31}}
mmx_U_blue = {q = 4653133841191616659, uq = 4653133841191616659, d = {
1083392147, 1083392147}, ud = {1083392147, 1083392147}, w = {16531, 16531,
16531, 16531}, uw = {16531, 16531, 16531, 16531},
b = "\223@\223@\223@\223@", ub = "\223@\223@\223@\223@", s = {4.6016326,
4.6016326}}
mmx_V_red = {q = 3680059998774375186, uq = 3680059998774375186, d = {
856830738, 856830738}, ud = {856830738, 856830738}, w = {13074, 13074,
13074, 13074}, uw = {13074, 13074, 13074, 13074},
b = "\0223\0223\0223\0223", ub = "\0223\0223\0223\0223", s = {
3.40397222e-08, 3.40397222e-08}}
mmx_V_green = {q = -1874370470539893252, uq = 16572373603169658364,
d = {-436410884, -436410884}, ud = {3858556412, 3858556412}, w = {-6660,
-6660, -6660, -6660}, uw = {58876, 58876, 58876, 58876}, b = "üåüåüåüå",
ub = "üåüåüåüå", s = {-1.49284852e+23, -1.49284852e+23}}
mmx_10w = {q = 1157442765409226768, uq = 1157442765409226768, d = {
269488144, 269488144}, ud = {269488144, 269488144}, w = {4112, 4112, 4112,
4112}, uw = {4112, 4112, 4112, 4112},
b = "\020\020\020\020\020\020\020\020",
ub = "\020\020\020\020\020\020\020\020", s = {2.84113667e-29,
2.84113667e-29}}
mmx_00ffw = {q = 71777214294589695, uq = 71777214294589695, d = {
16711935, 16711935}, ud = {16711935, 16711935}, w = {255, 255, 255, 255},
uw = {255, 255, 255, 255}, b = "ÿ\0ÿ\0ÿ\0ÿ", ub = "ÿ\0ÿ\0ÿ\0ÿ", s = {
2.34184089e-38, 2.34184089e-38}}
mmx_Y_coeff = {q = 2683904856074167615, uq = 2683904856074167615, d = {
624895295, 624895295}, ud = {624895295, 624895295}, w = {9535, 9535, 9535,
9535}, uw = {9535, 9535, 9535, 9535}, b = "?%?%?%?%", ub = "?%?%?%?%",
s = {1.65792287e-16, 1.65792287e-16}}
#1 0x40266a16 in yuv420_argb32 (image=0x4adf4e48 "",
py=0x46d0e398 <Address 0x46d0e398 out of bounds>,
pu=0x46d4d0d0 <Address 0x46d4d0d0 out of bounds>,
pv=0x46d854d0 <Address 0x46d854d0 out of bounds>, width=160, height=29,
rgb_stride=0, y_stride=0, uv_stride=0, cpu=1) at yuv2rgb.cpp:247
i = 14
#2 0x402661a3 in mmx_argb32 (image=0x4aa94008 "\002",
py=0x46c36008 <Address 0x46c36008 out of bounds>,
pu=0x46d17008 <Address 0x46d17008 out of bounds>,
pv=0x46d4f408 <Address 0x46d4f408 out of bounds>, width=1280, height=720,
rgb_stride=5120, y_stride=1280, uv_stride=640) at yuv2rgb.cpp:301
No locals.
#3 0x0807bb85 in PlaybackBox::updateVideo(QPainter*) (this=0xbfffe960,
p=0xbfffe3e0) at playbackbox.cpp:546
w = 1280
frame = (VideoFrame *) 0x87ae9c8
buf = (unsigned char *) 0x46c36008 <Address 0x46c36008 out of bounds>
convert = 0x40266178 <mmx_argb32>
img = {data = 0xbfffe3e0}
h = 720
outputbuf = (unsigned char *) 0x4aa94008 "\002"
#4 0x0807aa55 in PlaybackBox::paintEvent(QPaintEvent*) (this=0xbfffe960,
e=0xbfffe6f0) at playbackbox.cpp:317
r = {x1 = 1464, y1 = 359, x2 = 1847, y2 = 465}
p = {<Qt> = {static color0 = @0x41070ac0, static color1 = @0x41070ac8,
static black = @0x41070ad0, static white = @0x41070ad8,
static darkGray = @0x41070ae0, static gray = @0x41070ae8,
static lightGray = @0x41070af0, static red = @0x41070af8,
static green = @0x41070b00, static blue = @0x41070b08,
static cyan = @0x41070b10, static magenta = @0x41070b18,
static yellow = @0x41070b20, static darkRed = @0x41070b28,
static darkGreen = @0x41070b30, static darkBlue = @0x41070b38,
static darkCyan = @0x41070b40, static darkMagenta = @0x41070b48,
static darkYellow = @0x41070b50, static arrowCursor = @0x4106f4a0,
static upArrowCursor = @0x4106f4a4, static crossCursor = @0x4106f4a8,
static waitCursor = @0x4106f4ac, static ibeamCursor = @0x4106f4b0,
static sizeVerCursor = @0x4106f4b4, static sizeHorCursor = @0x4106f4b8,
static sizeBDiagCursor = @0x4106f4bc,
static sizeFDiagCursor = @0x4106f4c0, static sizeAllCursor = @0x4106f4c4,
static blankCursor = @0x4106f4c8, static splitVCursor = @0x4106f4d0,
static splitHCursor = @0x4106f4cc,
static pointingHandCursor = @0x4106f4d4,
static forbiddenCursor = @0x4106f4d8,
static whatsThisCursor = @0x4106f4dc}, flags = 33281, d = 0x0,
pdev = 0xbfffe988, bg_col = {static color_init = true,
static globals_init = true, static colormodel = d32, d = {
argb = 4287927444, d8 = {argb = 4287927444, pix = 178 '²',
invalid = 148 '\224', dirty = 0 '\0', direct = 0 '\0'}, d32 = {
argb = 4287927444, pix = 38066}}}, bg_mode = 0 '\0', rop = 0 '\0',
pu = 208 'Ð', bro = {xp = 0, yp = 0}, cfont = {d = 0x822f6b8}, pfont = 0x0,
cpen = {<Qt> = {static color0 = @0x41070ac0, static color1 = @0x41070ac8,
static black = @0x41070ad0, static white = @0x41070ad8,
static darkGray = @0x41070ae0, static gray = @0x41070ae8,
static lightGray = @0x41070af0, static red = @0x41070af8,
static green = @0x41070b00, static blue = @0x41070b08,
static cyan = @0x41070b10, static magenta = @0x41070b18,
static yellow = @0x41070b20, static darkRed = @0x41070b28,
static darkGreen = @0x41070b30, static darkBlue = @0x41070b38,
static darkCyan = @0x41070b40, static darkMagenta = @0x41070b48,
static darkYellow = @0x41070b50, static arrowCursor = @0x4106f4a0,
static upArrowCursor = @0x4106f4a4, static crossCursor = @0x4106f4a8,
static waitCursor = @0x4106f4ac, static ibeamCursor = @0x4106f4b0,
static sizeVerCursor = @0x4106f4b4, static sizeHorCursor = @0x4106f4b8,
static sizeBDiagCursor = @0x4106f4bc,
static sizeFDiagCursor = @0x4106f4c0,
static sizeAllCursor = @0x4106f4c4, static blankCursor = @0x4106f4c8,
static splitVCursor = @0x4106f4d0, static splitHCursor = @0x4106f4cc,
static pointingHandCursor = @0x4106f4d4,
static forbiddenCursor = @0x4106f4d8,
static whatsThisCursor = @0x4106f4dc}, data = 0x42d035f8},
cbrush = {<Qt> = {static color0 = @0x41070ac0, static color1 = @0x41070ac8,
static black = @0x41070ad0, static white = @0x41070ad8,
static darkGray = @0x41070ae0, static gray = @0x41070ae8,
static lightGray = @0x41070af0, static red = @0x41070af8,
static green = @0x41070b00, static blue = @0x41070b08,
static cyan = @0x41070b10, static magenta = @0x41070b18,
static yellow = @0x41070b20, static darkRed = @0x41070b28,
static darkGreen = @0x41070b30, static darkBlue = @0x41070b38,
static darkCyan = @0x41070b40, static darkMagenta = @0x41070b48,
static darkYellow = @0x41070b50, static arrowCursor = @0x4106f4a0,
static upArrowCursor = @0x4106f4a4, static crossCursor = @0x4106f4a8,
static waitCursor = @0x4106f4ac, static ibeamCursor = @0x4106f4b0,
static sizeVerCursor = @0x4106f4b4, static sizeHorCursor = @0x4106f4b8,
static sizeBDiagCursor = @0x4106f4bc,
static sizeFDiagCursor = @0x4106f4c0,
static sizeAllCursor = @0x4106f4c4, static blankCursor = @0x4106f4c8,
static splitVCursor = @0x4106f4d0, static splitHCursor = @0x4106f4cc,
static pointingHandCursor = @0x4106f4d4,
static forbiddenCursor = @0x4106f4d8,
static whatsThisCursor = @0x4106f4dc}, data = 0x8210d88}, crgn = {
data = 0x825a4c8}, tabstops = 0, tabarray = 0x0, tabarraylen = 0,
block_ext = false, wx = 0, wy = 0, ww = 1920, wh = 540, vx = 0, vy = 0,
vw = 1920, vh = 540, wxmat = {_m11 = 1, _m12 = 0, _m21 = 0, _m22 = 1,
_dx = 0, _dy = 0}, xmat = {_m11 = 1, _m12 = 0, _m21 = 0, _m22 = 1,
_dx = 0, _dy = 0}, ixmat = {_m11 = 1, _m12 = 0, _m21 = 0, _m22 = 1,
_dx = 0, _dy = 0}, txop = 0, txinv = false, penRef = 0x8195448,
brushRef = 0x8194b18, ps_stack = 0x0, wm_stack = 0x0, dpy = 0x818da20,
scrn = 0, hd = 10486501, rendhd = 10486616, gc = 0x825bbd0,
gc_brush = 0x825bae0, curPt = {xp = 0, yp = 0}, clip_serial = 1848}
#5 0x40c95a17 in QWidget::event(QEvent*) ()
from /usr/lib/qt3/lib/libqt-mt.so.3
No symbol table info available.
(gdb) print *frame
No symbol "frame" in current context.
(gdb) up
#1 0x40266a16 in yuv420_argb32 (image=0x4adf4e48 "",
py=0x46d0e398 <Address 0x46d0e398 out of bounds>,
pu=0x46d4d0d0 <Address 0x46d4d0d0 out of bounds>,
pv=0x46d854d0 <Address 0x46d854d0 out of bounds>, width=160, height=29,
rgb_stride=0, y_stride=0, uv_stride=0, cpu=1) at yuv2rgb.cpp:247
247 mmx_yuv2rgb (py, pu, pv);
(gdb) up
#2 0x402661a3 in mmx_argb32 (image=0x4aa94008 "\002",
py=0x46c36008 <Address 0x46c36008 out of bounds>,
pu=0x46d17008 <Address 0x46d17008 out of bounds>,
pv=0x46d4f408 <Address 0x46d4f408 out of bounds>, width=1280, height=720,
rgb_stride=5120, y_stride=1280, uv_stride=640) at yuv2rgb.cpp:301
301 yuv420_argb32 (image, py, pu, pv, width, height,
(gdb) up
#3 0x0807bb85 in PlaybackBox::updateVideo(QPainter*) (this=0xbfffe960,
p=0xbfffe3e0) at playbackbox.cpp:546
546 convert(outputbuf, buf, buf + (w * h), buf + (w * h * 5 / 4), w, h,
(gdb) print *frame
$1 = {codec = FMT_YV12, buf = 0x0, height = 720, width = 1280, bpp = 12,
size = 1382400, frameNumber = 0, timecode = 82315276, priv = {
0x7a9dc922 <Address 0x7a9dc922 out of bounds>,
0x55741421 <Address 0x55741421 out of bounds>, 0x0, 0x0},
qscale_table = 0x0, qstride = 0}
More information about the mythtv-dev
mailing list