[mythtv-commits] Ticket #12932: Patch to EIT table version handling in DVBStreamData

MythTV noreply at mythtv.org
Thu Jan 5 22:41:58 UTC 2017


#12932: Patch to EIT table version handling in DVBStreamData
-----------------------------------+-----------------------------
 Reporter:  Roger James <roger@…>  |          Owner:  stuarta
     Type:  Patch - Bug Fix        |         Status:  assigned
 Priority:  major                  |      Milestone:  29.0
Component:  MythTV - DVB           |        Version:  Master Head
 Severity:  high                   |     Resolution:
 Keywords:                         |  Ticket locked:  0
-----------------------------------+-----------------------------

Comment (by stuarta):

 Just doing some testing on this "as is" to see if there are any
 regressions,
 and i'm reliably crashing this within about 15mins from startup. It's
 crashing
 here

 {{{
 Thread 5 "TVRecEvent" received signal SIGSEGV, Segmentation fault.
 [Switching to Thread 0x7f97b67db700 (LWP 28463)]
 0x00007f97d5aae366 in QGenericAtomicOps<QBasicAtomicOps<4> >::load<int> (
     _q_value=@0x25: <error reading variable>)
     at /usr/include/x86_64-linux-gnu/qt5/QtCore/qgenericatomic.h:90
 90              return _q_value;
 }}}

 Up the stack a bit

 {{{
 #10 0x00007f97d5cd2989 in QMap<unsigned short,
 ServiceDescriptionTable*>::end (this=0x7f96f801f6b8)
     at /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:530
 No locals.
 #11 0x00007f97d5cc80d1 in DVBStreamData::Reset (this=0x7f97ac18ef30,
 desired_netid=9018, desired_tsid=24640,
     desired_serviceid=25664) at mpeg/dvbstreamdata.cpp:285
         section = {i = 0x7f96f801f660}
         table = {i = 0x7f96f801f698}
         stream = {i = 0x7f96f801f1a0}
         network = {i = 0x7f96f801f770}
         nit_sections = std::vector of length 3, capacity 4 =
 {0x7f96f83493a0, 0x7f96f81b0300, 0x7f96f8985b60}
 }}}

 Some digging

 {{{
 #11 0x00007f97d5cc80d1 in DVBStreamData::Reset (this=0x7f97ac18ef30,
 desired_netid=9018, desired_tsid=24640,
     desired_serviceid=25664) at mpeg/dvbstreamdata.cpp:285
 285                                 section != (*table).sections.end();
 ++table)

 (gdb) print *section
 $12 = (ServiceDescriptionTable *&) @0x7f96f801f680: 0x0
 }}}

 So by my reading section is pointing to a null object.
 It's the calls to end() in the iterator that are causing it to blow up.

 The contents of (*table).sections also look fishy...
 {{{
 (gdb) print (*table).sections
 $16 = {d = 0x25}
 }}}
 looking at the table object itself
 {{{
 (gdb) print (*table)
 $15 = (SdtSectionsAndStatus &) @0x7f96f801f6b8: {sections = {d = 0x25},
 status = {m_version = -519974397,
     m_sections = std::vector of length -140285996814963, capacity
 -140285996814850 = {97 'a', 95 '_',
       159 '\237', 146 '\222', 80 'P', 250 '\372', 60 '<', 107 'k', 32 ' ',
 193 '\301', 112 'p', 248 '\370',
       96 '`', 64 '@', 35 '#', 58 ':', 112 'p', 81 'Q', 85 'U', 73 'I', 225
 '\341', 159 '\237', 24 '\030',
       0 '\000', 0 '\000', 0 '\000', 49 '1', 0 '\000', 1 '\001', 11 '\v',
 84 'T', 2 '\002', 80 'P', 0 '\000',
       77 'M', 213 '\325', 101 'e', 110 'n', 103 'g', 31 '\037', 80 'P',
 111 'o', 119 'w', 101 'e', 114 'r',
       32 ' ', 82 'R', 97 'a', 110 'n', 103 'g', 101 'e', 114 'r', 115 's',
 58 ':', 32 ' ', 68 'D', 105 'i',
       110 'n', 111 'o', 32 ' ', 83 'S', 117 'u', 112 'p', 101 'e', 114
 'r', 99 'c', 104 'h', 97 'a', 114 'r',
       103 'g', 101 'e', 177 '\261', 76 'L', 111 'o', 118 'v', 101 'e', 32
 ' ', 65 'A', 116 't', 32 ' ', 70 'F',
       105 'i', 114 'r', 203 '\313', 69 'E', 19 '\023', 46 '.', 101 'e',
 215 '\327', 169 '\251', 55 '7',
       118 'v', 189 '\275', 185 '\271', 232 '\350', 153 '\231', 105 'i', 45
 '-', 187 '\273', 90 'Z', 188 '\274',
       56 '8', 191 '\277', 11 '\v', 149 '\225', 180 '\264', 117 'u', 233
 '\351', 78 'N', 226 '\342', 75 'K',
       213 '\325', 240 '\360', 254 '\376', 200 '\310', 61 '=', 100 'd', 109
 'm', 251 '\373', 78 'N', 173 '\255',
       150 '\226', 57 '9', 112 'p', 80 'P', 6 '\006', 245 '\365', 11 '\v',
 11 '\v', 117 'u', 110 'n', 100 'd',
       80 'P', 6 '\006', 246 '\366', 5 '\005', 12 '\f', 101 'e', 110 'n',
 103 'g', 80 'P', 6 '\006', 242 '\362',
       64 '@', 148 '\224', 101 'e', 110 'n', 103 'g', 80 'P', 6 '\006', 243
 '\363', 20 '\024', 5 '\005',
       101 'e', 110 'n', 103 'g', 126 '~', 1 '\001', 247 '\367', 84 'T', 2
 '\002', 128 '\200', 0 '\000', 95 '_',
       4 '\004', 0 '\000', 0 '\000', 35 '#', 58 ':', 137 '\211', 15 '\017',
 0 '\000', 101 'e', 110 'n', 103 'g',
       31 '\037', 1 '\001', 222 '\336', 159 '\237', 164 '\244', 42 '*', 93
 ']', 211 '\323', 221 '\335',
       174 '\256', 240 '\360', 118 'v', 12 '\f', 196 '\304', 10 '\n', 47
 '/', 54 '6', 51 '3', 57 '9', 55 '7',
       55 '7', 47 '/', 48 '0', 48 '0', 49 '1'...}, static init_bits =
 "\376\374\370\360\340\300\200"},
   timestamp = {d = {d = 0x7f96f801f9a0}}}
 }}}

 That's the notes so far, work continues....

--
Ticket URL: <https://code.mythtv.org/trac/ticket/12932#comment:8>
MythTV <http://www.mythtv.org>
MythTV Media Center


More information about the mythtv-commits mailing list