Opened 15 years ago
Closed 15 years ago
#6725 closed defect (fixed)
segmentation fault in mythbackend
Reported by: | Owned by: | danielk | |
---|---|---|---|
Priority: | minor | Milestone: | 0.22 |
Component: | MythTV - DVB/ATSC | Version: | head |
Severity: | medium | Keywords: | |
Cc: | Ticket locked: | no |
Description
for me, mythbackend has been unreliable for a while i took the time to run it under gdb and have two crash logs it crashed twice in the same place
i was doing nothing at the time (no recording or live tv)
this time, i don't think it is the dvb-s signal strength/quality or stream errors. but i could be wrong.
i will attach the full logs, but here are the crash sites
the first:
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x459fd950 (LWP 28282)] 0x00007f3d6891e97b in QLocalePrivate::numberToCLocale () from /usr/lib/qt4/libQtCore.so.4
Thread 37 (Thread 0x4080d950 (LWP 28367)): #0 0x00007f3d6737da62 in select () from /lib/libc.so.6 No symbol table info available. #1 0x00007f3d6fa514d8 in DVBStreamHandler::RunTS (this=0x7f3d580af6d0) at dvbstreamhandler.cpp:339
timeout = {tv_sec = 0, tv_usec = 30000} ret = 0 len = 0 remainder = 0 buffer_size = 2820000 buffer = (unsigned char *) 0xa5da60 "G" dvr_dev_path = {static shared_null = {ref = {_q_value = 8}, alloc = 0, size = 0, data = 0x7f3d68c89698 "", array = ""}, static shared_empty = {ref = {_q_value = 2}, alloc = 0, size = 0, data = 0x7f3d68c896b8 "", array = ""}, d = 0xa16b30} dvr_fd = 42 _error = false fd_select_set = {fds_bits = {0 <repeats 16 times>}}
#2 0x00007f3d6fa52292 in DVBStreamHandler::Run (this=0x7f3d580af6d0) at dvbstreamhandler.cpp:253 No locals. #3 0x00007f3d6fa522b3 in run_dvb_stream_handler_thunk (param=0x7f3d580af6d0) at dvbstreamhandler.cpp:194
mon = (DVBStreamHandler *) 0x7f3d580af6d0
#4 0x00007f3d67fa2097 in start_thread () from /lib/libpthread.so.0 No symbol table info available. #5 0x00007f3d67383ccd in clone () from /lib/libc.so.6 No symbol table info available. #6 0x0000000000000000 in ?? () No symbol table info available.
and the second (6 minutes later):
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x4c581950 (LWP 28442)] 0x00007f181ed9597b in QLocalePrivate::numberToCLocale () from /usr/lib/qt4/libQtCore.so.4
Thread 30 (Thread 0x4e585950 (LWP 28552)): #0 0x00007f181d7f4a62 in select () from /lib/libc.so.6 No symbol table info available. #1 0x00007f1825ec84d8 in DVBStreamHandler::RunTS (this=0x7f180c0736a0) at dvbstreamhandler.cpp:339
timeout = {tv_sec = 0, tv_usec = 50000} ret = 1 len = 0 remainder = 0 buffer_size = 2820000 buffer = (unsigned char *) 0x7f181192a010 "G\t\001\021\205\n<C3>\v\001ɨp\211\021<DE>\224<C1>\212\223T<A4>\bT<CB><E7>\030
<AA>\232<A9>\234<A4>\006g=\035Jd\235H3H\f<B0>\211R2\2203)\003\020<E9>X\235J<A0>"
dvr_dev_path = {static shared_null = {ref = {_q_value = 14}, alloc = 0, size = 0, data = 0x7f181f100698 "", array = ""}, static shared_empty = {ref = {_q_value = 2}, alloc = 0, size = 0, data = 0x7f181f1006b8 "", array = ""}, d = 0x948970} dvr_fd = 52 _error = false fd_select_set = {fds_bits = {4503599627370496, 0 <repeats 15 times>}}
#2 0x00007f1825ec9292 in DVBStreamHandler::Run (this=0x7f180c0736a0) at dvbstreamhandler.cpp:253 No locals. #3 0x00007f1825ec92b3 in run_dvb_stream_handler_thunk (param=0x7f180c0736a0) at dvbstreamhandler.cpp:194
mon = (DVBStreamHandler *) 0x7f180c0736a0
#4 0x00007f181e419097 in start_thread () from /lib/libpthread.so.0 No symbol table info available. #5 0x00007f181d7faccd in clone () from /lib/libc.so.6 No symbol table info available. #6 0x0000000000000000 in ?? () No symbol table info available.
Attachments (4)
Change History (21)
Changed 15 years ago by
Attachment: | gdb.txt-200907140940.zip added |
---|
Changed 15 years ago by
Attachment: | gdb.txt-200907140946.zip added |
---|
Changed 15 years ago by
Attachment: | myth.log-200907140940.zip added |
---|
Changed 15 years ago by
Attachment: | myth.txt-200907140946.zip added |
---|
comment:1 Changed 15 years ago by
Status: | new → infoneeded_new |
---|
comment:2 Changed 15 years ago by
This backtrace appears to be caused by the expirer miscalculating the bitrate of your recordings.
maxKBperMin = 139899972187635
Looks to me like it's caused by a corrupt recording.
comment:3 Changed 15 years ago by
trunk. no patches.
Path: . URL: http://cvs.mythtv.org/svn/trunk Repository Root: http://cvs.mythtv.org/svn Repository UUID: 7dbf422c-18fa-0310-86e9-fd20926502f2 Revision: 20881 Node Kind: directory Schedule: normal Last Changed Author: danielk Last Changed Rev: 20881 Last Changed Date: 2009-07-13 22:14:33 +0100 (Mon, 13 Jul 2009)
comment:4 Changed 15 years ago by
2.6.27-gentoo-r7 x86_64 on an AMD Athlon64 X2 6000+ two DVB-S cards and a PVR-350 master backend
comment:5 Changed 15 years ago by
Status: | infoneeded_new → new |
---|
Any chance you could attach the full backtrace as per section 22.2 of the howto please?
Stuart
comment:6 Changed 15 years ago by
Status: | new → infoneeded_new |
---|
comment:7 Changed 15 years ago by
i *did* that when i submitted the bug report just scroll up and there they are :-)
comment:8 Changed 15 years ago by
Milestone: | unknown → 0.22 |
---|---|
Status: | infoneeded_new → new |
Following patch should prevent the segfault, though I'm not sure whether 'state' should default to false or true if we fail to discover it's true state.
Index: mythtv/programs/mythbackend/playbacksock.cpp =================================================================== --- mythtv/programs/mythbackend/playbacksock.cpp (revision 20919) +++ mythtv/programs/mythbackend/playbacksock.cpp (working copy) @@ -289,8 +289,14 @@ " gave us no response."); } + bool state = false; + + if (!strlist.isEmpty()) + { QStringList::const_iterator it = strlist.begin(); - bool state = (*it).toInt(); + state = (*it).toInt(); + } + if (busy_input) { it++;
comment:9 Changed 15 years ago by
not wishing to appear ungrateful... but did you try compiling that? it doesn't the variable it is now out of scope in "if (busy_input) {" will look at the code in playbacksock.cpp and see what you meant
comment:10 Changed 15 years ago by
Status: | new → infoneeded_new |
---|
Index: mythtv/programs/mythbackend/playbacksock.cpp =================================================================== --- mythtv/programs/mythbackend/playbacksock.cpp (revision 20919) +++ mythtv/programs/mythbackend/playbacksock.cpp (working copy) @@ -289,8 +289,13 @@ " gave us no response."); } + bool state = false; + + if (!strlist.isEmpty()) + { QStringList::const_iterator it = strlist.begin(); - bool state = (*it).toInt(); + state = (*it).toInt(); + if (busy_input) { it++; @@ -302,6 +307,7 @@ state = false; // pretend it's not busy if we can't parse response } } + } return state; }
comment:11 Changed 15 years ago by
i looked at the code and pretty much made the same change.
it took a while to install because something has changed in the way that the configure script handles XvMC; which meant that i could not get myth to compile.
it has been running for 12 hours now, with no crashes.
i will put in a log message to see how often this occurs.
comment:12 Changed 15 years ago by
in my slave backend log (newyork) i saw this message:
2009-07-17 11:46:37.078 MythSocket(7ff63c1034e0:-1): writeStringList: Error, socket went unconnected.
and in the master backend i saw this:
2009-07-17 11:46:23.280 Slave backend: newyork no longer connected 2009-07-17 11:46:23.285 PlaybackSock::SendReceiveStringList(): No response. 2009-07-17 11:46:23.285 PlaybackSock, Error: IsBusy: QUERY_REMOTEENCODER 56 gave us no response. 2009-07-17 11:46:23.285 PlaybackSock, Error: IsBusy: strlist is empty 56
the last message is the log i added to print when the "if (!strlist.isEmpty())" test failed
comment:13 Changed 15 years ago by
The slave backends losing connectivity to the master is a known issue that Daniel is investigating, the segfault although related will be treated as a separate issue. If you can confirm that the master backend remains functional and doesn't segfault with the application of the patch?
comment:14 Changed 15 years ago by
i'm in the office so cannot run mythfrontend
however, i started a recording with mythweb and can watch the in-flight recording with flowplayer. so it seems to be still working.
there are some regular log messages "strlist is empty" indicating the the "if test" is being triggered. my assumption is that i would have crashed on each occurance without your patch.
comment:15 Changed 15 years ago by
Status: | infoneeded_new → new |
---|
comment:16 Changed 15 years ago by
comment:17 Changed 15 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
The segfault has been fixed, the socket disconnect problem is a separate issue and already has several tickets open. I'll reference #6516 when that is fixed.
Which branch of Myth, which revision and what patches do you have applied?