[mythtv] [Patch] Re: [BUG?] Threading / Sockets problem with master and slave backends

Jake mythtv at jake.ath.cx
Wed Sep 14 13:21:01 UTC 2005


Hi all,

I think I have same threading lock issue but on function "void
MainServer::customEvent(QCustomEvent *e)" from mythbackend.
The crash happens when I try to use mythweb or another frontend to get a
list of records while backend is recording something.
Do you think we can use similar "fix" or we need another solution?

Here is a stack at crash time and attached you can find full stack from
all threads:

#0  0xb6beba04 in QMutex::lock () from /usr/qt/3/lib/libqt-mt.so.3
#1  0x08092b9a in RefSocket::Lock (this=0xb2f10250) at server.h:22
#2  0x08072069 in MainServer::customEvent (this=0xb2f005c0, e=0x812c800)
at mainserver.cpp:545
        pbs = (PlaybackSock *) 0x8115678
        sock = (RefSocket *) 0xb2f10250
        sendGlobal = false
        sentSet = {<QGList> = {<> = {<No data fields>}, firstNode =
0xb2f02430, lastNode = 0xb2f02430,
    curNode = 0xb2f02430, curIndex = 0, numNodes = 1, iterators = 0x0},
<No data fields>}
        iter = {<std::iterator<std::random_access_iterator_tag,
PlaybackSock*, int, PlaybackSock**, PlaybackSock*&>> = {<No data
fields>}, _M_current = 0x80e50b8}
        broadcast = {<QValueList<QString>> = {sh = 0xb2f36f40}, <No data
fields>}
        sendstuff = true
#3  0xb6964efd in QObject::event () from /usr/qt/3/lib/libqt-mt.so.3
#4  0xb690f874 in QApplication::internalNotify () from
/usr/qt/3/lib/libqt-mt.so.3
#5  0xb690ec2a in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3
#6  0xb6910581 in QApplication::sendPostedEvents () from
/usr/qt/3/lib/libqt-mt.so.3
#7  0xb6910418 in QApplication::sendPostedEvents () from
/usr/qt/3/lib/libqt-mt.so.3
#8  0xb68bc302 in QEventLoop::processEvents () from
/usr/qt/3/lib/libqt-mt.so.3
#9  0xb6920d0c in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3
#10 0xb6920bce in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3


Thanks,
Jake

Malc wrote:

> Malcolm Smith wrote:
>
>> Hi all,
>>
>>
>> Threading problems
>>
>> I think there may be problems with Sockets or threads. (See attached
>> bt).
>>
>> I can reliably reproduce this problem.
>>
>> Setup
>> Master Backend / Slave backend both in idle state. This only fails
>> when a live slave backend in idle state is present
>>
>> Method:
>> Open 2 browsers and request status simultaneously. The thread on the
>> master backend handling status / web crashes, recording continues on
>> both backend will remain in this state until killed. There is never
>> any further response from the status port 6544/6543. (Sometimes it
>> takes a few tries, so it's something to do with collision timing).
>>
>> It can also be reproduced when requesting multiple activities via
>> mythweb that take time to process (rescheds, status, deletes), but
>> only ever when slave backend is present.
>>
>> For background master has DVB, slave has DVB and PVR250 card. Master
>> server also has mysql running on it.
>> Both backends are built from SVN from Weds 31 Aug, identical
>> distributions.
>>
>> back trace attached
>>
>> Because of this the WAF is dropping, as she's impatient on the
>> web.... help please.
>>
>>
>> Thread 12 (Thread 31009712 (LWP 4318)):
>> #0  0x001cf7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
>> #1  0x02b9c7f6 in __nanosleep_nocancel () from /lib/tls/libc.so.6
>> #2  0x02bcad6a in usleep () from /lib/tls/libc.so.6
>> #3  0x007dbcaa in EITScanner::RunEventLoop (this=0x8109d90)
>>    at eitscanner.cpp:62
>> #4  0x007dbc6f in EITScanner::SpawnEventLoop (param=0x8109d90)
>>    at eitscanner.cpp:50
>> #5  0x0018e98c in start_thread () from /lib/tls/libpthread.so.0
>> #6  0x02bd17da in clone () from /lib/tls/libc.so.6
>>
>> Thread 11 (Thread 129358768 (LWP 4439)):
>> #0  0x001cf7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
>> #1  0x02b9c7f6 in __nanosleep_nocancel () from /lib/tls/libc.so.6
>> #2  0x02bcad6a in usleep () from /lib/tls/libc.so.6
>> #3  0x006c9364 in TVRec::RunTV (this=0x8101af0) at tv_rec.cpp:1612
>> #4  0x006c8dd9 in TVRec::EventThread (param=0x8101af0) at
>> tv_rec.cpp:1534
>> #5  0x0018e98c in start_thread () from /lib/tls/libpthread.so.0
>> #6  0x02bd17da in clone () from /lib/tls/libc.so.6
>>
>> Thread 10 (Thread 98745264 (LWP 4441)):
>> #0  0x001cf7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
>> #1  0x00193eee in __lll_mutex_lock_wait () from /lib/tls/libpthread.so.0
>> #2  0x00190df4 in _L_mutex_lock_29 () from /lib/tls/libpthread.so.0
>> #3  0xf6e00010 in ?? ()
>> #4  0xf6f48cf8 in ?? ()
>> #5  0x070d5214 in ?? () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
>> #6  0x00a76ee0 in ?? ()
>> #7  0x080ef278 in ?? ()
>> #8  0x05e2b5f8 in ?? ()
>> #9  0x06f972f0 in QRecursiveMutexPrivate::lock ()
>>   from /usr/lib/qt-3.3/lib/libqt-mt.so.3 Previous frame identical to
>> this frame (corrupt stack?)
>>
>>
>>
>>
> I've spent some time tracking through the code.
>
> I think I'm getting somewhere with this. This problem only seems to be
> common in the following circumstances (but will occur in other
> circumstances).
>
> Master backend is acting as a middleware (i.e. a backend to a client
> and client to slave backends/mysql). Examples of this are:
> 1. Requesting status (localhost:6545) with slave backends available
> from a web browser
> 2. Requesting sql and file activity from a frontend or browser, esp
> when slave backends are present
>
> The critical bit of code seems to be:
> - programs/mythbackend/playbacksock.cpp
>
> bool PlaybackSock::SendReceiveStringList(QStringList &strlist)
> {
>   sock->Lock();
>
>  ......
>
> Thread will hang at sock->Lock and never return.
>
> I've attached a patch which does fix the problem, but does make the
> code more stable, by not getting stuck on the lock.
> What the patch does is to use tryLock to see if the lock can be
> obtained. If not, it tries once every 0.1s for 20 times. If not lock
> after that, then it aborts the SendReceive.
>
> This means whatever the calling code was trying to get done (e.g.
> schedule, delete etc) doesn't get done.... It wouldn't have anyway..
> and would have required a restart of the masterbackend! I can't think
> of any critical activity on myth that requires critical confirmation
> and execution only once. e.g. if delete didn't work then just retry..
> frustrating but less so than a restart.
>
> Can people try this patch, see whether it inceases stability for them?
> I've had no lockups using this code.
>
> Obviously the long term solution is to fix the problem. I'm happy to
> help discuss this problem.
>
>
> More on the problem... looking at the activity
>
> Case 1 - This is a standard activity
> Client     MasterBackend       Slave backend
>
>  1 Req->
>               1 Process
>            Sendreceive Lock
>                  1  Req ->
>                                              -> 1Receive req
>                                                   1 SlaveProcess
>                                              <-  1 Response
>                   1 Response <-
>              Sendreceive unlock
>             <- 1 Response
>
> In the case where two requests are made quickly in a row this seems to
> be happening. (e.g. requesting status from 2 different browsers within
> a second or so of each other)
> Case 2 - failure
>
> Client     MasterBackend       Slave backend
>
>  1 Req->
>               1 Process
>           1 Sendreceive Lock
>                  1  Req ->
>                                              -> 1Receive req
>                                                   1 SlaveProcess   
> (in this case slave process takes time... maybe swapping or processing)
> 2 Req ->                                                              
> (new req arrives)
>               2 Process
>             2 SendreceiveLock                                   (In
> some cases this seems to fail, rather than waiting to come free)
>                                              <-  1 Response       (If
> this response is never sent, or gets lost then thread is forever locked)

-------------- next part --------------
(gdb) thread apply all bt full

Thread 17 (Thread -1362138192 (LWP 28869)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb65b1b3d in poll () from /lib/tls/libc.so.6
#2  0xb7c96063 in DVBRecorder::StartRecording (this=0x8107628) at dvbrecorder.cpp:580
        ret = 1
        cardnum = 0
        polls = {fd = 21, events = 1, revents = 0}
#3  0xb7c3df46 in SpawnEncode (param=0x8107650) at tv_rec.cpp:48
        nvr = (class RecorderBase *) 0x8107650
#4  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#5  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 16 (Thread -1353745488 (LWP 28868)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb658c116 in nanosleep () from /lib/tls/libc.so.6
#2  0xb65b4740 in usleep () from /lib/tls/libc.so.6
#3  0xb7ad9ff7 in ThreadedFileWriter::DiskLoop (this=0x80ed9b8) at RingBuffer.cpp:276
        size = 221464
        written = 264140
        timer = {ds = 31978919}
#4  0xb7ad95d1 in ThreadedFileWriter::boot_writer (wotsit=0x80ed9b8) at RingBuffer.cpp:120
        fw = (ThreadedFileWriter *) 0x80ed9b8
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 15 (Thread -1343251536 (LWP 28865)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb65b1b3d in poll () from /lib/tls/libc.so.6
#2  0xb7cd4536 in DVBSIParser::StartSectionReader (this=0x8101590) at dvbsiparser.cpp:241
        ret = 1
        buffer = "╦­\221\000\001Ú\000\000\000\003└\b0RËM└\a\b\030\001eng\001\000\000\020Home Improvement­\n\201\b\b8\005 \037\000\000\000└\t0R┌U└\025\030\030\001eng\001\000\000\020Paid Programming­\n\201\b\b8\005 \037\000\000\000└\n0R´m└\016\020\024\001eng\001\000\000\fMaury Povich­\n\201\b\b8\005 \037\000\000\000\fĐ░!eng\001\000\000\017Judge Joe Brown­\n\201\b\b8\005 \037\000\000\000┴\0220SJŇ└\a\b\025\001eng\001\000\000\r"...
        processed = false
#3  0xb7ca080f in DVBChannel::SpawnSectionReader (param=0x8101590) at dvbchannel.cpp:93
        siparser = (class DVBSIParser *) 0x8101590
#4  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#5  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 14 (Thread -1334858832 (LWP 28864)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7021956 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#2  0xb6bec3cd in QWaitCondition::wait () from /usr/qt/3/lib/libqt-mt.so.3
#3  0x08095807 in ProcessRequestThread::run (this=0xb2f00da0) at mainserver.cpp:69
#4  0xb6903669 in QThreadInstance::start () from /usr/qt/3/lib/libqt-mt.so.3
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 13 (Thread -1326466128 (LWP 28863)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7021956 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#2  0xb6bec3cd in QWaitCondition::wait () from /usr/qt/3/lib/libqt-mt.so.3
#3  0x08095807 in ProcessRequestThread::run (this=0xb2f00c58) at mainserver.cpp:69
#4  0xb6903669 in QThreadInstance::start () from /usr/qt/3/lib/libqt-mt.so.3
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 12 (Thread -1318073424 (LWP 28862)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7021956 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#2  0xb6bec3cd in QWaitCondition::wait () from /usr/qt/3/lib/libqt-mt.so.3
#3  0x08095807 in ProcessRequestThread::run (this=0xb2f00b10) at mainserver.cpp:69
#4  0xb6903669 in QThreadInstance::start () from /usr/qt/3/lib/libqt-mt.so.3
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 11 (Thread -1309680720 (LWP 28861)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7021956 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#2  0xb6bec3cd in QWaitCondition::wait () from /usr/qt/3/lib/libqt-mt.so.3
#3  0x08095807 in ProcessRequestThread::run (this=0xb2f009c0) at mainserver.cpp:69
#4  0xb6903669 in QThreadInstance::start () from /usr/qt/3/lib/libqt-mt.so.3
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 10 (Thread -1301288016 (LWP 28860)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7021956 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#2  0xb6bec3cd in QWaitCondition::wait () from /usr/qt/3/lib/libqt-mt.so.3
#3  0x08095807 in ProcessRequestThread::run (this=0xb2f006a8) at mainserver.cpp:69
#4  0xb6903669 in QThreadInstance::start () from /usr/qt/3/lib/libqt-mt.so.3
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 9 (Thread -1292895312 (LWP 28859)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb658c116 in nanosleep () from /lib/tls/libc.so.6
#2  0xb658bf15 in sleep () from /lib/tls/libc.so.6
#3  0xb7c0aebe in JobQueue::ProcessQueue (this=0x80f8ef8) at jobqueue.cpp:469
        chanid = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80cc070, static shared_null = 0x80cc070}
        starttime = {d = {jd = 0}, t = {ds = 0}}
        startts = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80cc070, static shared_null = 0x80cc070}
        type = 0
        id = 0
        cmds = 1
        flags = 1
        status = 0
        hostname = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80cc070, static shared_null = 0x80cc070}
        sleepTime = 60
        jobStatus = {sh = 0x8101ed0}
        maxJobs = 1
        queueStartTimeStr = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x812bce8, static shared_null = 0x80cc070}
        queueEndTimeStr = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x812ead0, static shared_null = 0x80cc070}
        queueStartTime = 0
        queueEndTime = 0
        curQTime = {ds = 0}
        curTime = -1292897364
        message = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80cc070, static shared_null = 0x80cc070}
        tmpStr = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80cc070, static shared_null = 0x80cc070}
        jobs = {sh = 0x80fd218}
        atMax = false
        inTimeWindow = true
        startedJobAlready = false
#4  0xb7c063c2 in JobQueue::RunQueueProcesser (this=0x80f8ef8) at jobqueue.cpp:135
#5  0xb7c063eb in JobQueue::QueueProcesserThread (param=0x80f8ef8) at jobqueue.cpp:141
        jobqueue = (JobQueue *) 0x80f8ef8
#6  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#7  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 8 (Thread -1282663504 (LWP 28858)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb658c116 in nanosleep () from /lib/tls/libc.so.6
#2  0xb658bf15 in sleep () from /lib/tls/libc.so.6
#3  0x080af4b6 in HouseKeeper::RunHouseKeeping (this=0x80fd670) at housekeeper.cpp:175
        period = 1
        maxhr = 23
        minhr = 22
        dbTag = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x81019b0, static shared_null = 0x80cc070}
#4  0x080affe9 in HouseKeeper::doHouseKeepingThread (param=0x80fd670) at housekeeper.cpp:236
        hkeeper = (HouseKeeper *) 0x80fd670
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 7 (Thread -1274270800 (LWP 28857)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb658c116 in nanosleep () from /lib/tls/libc.so.6
#2  0xb658bf15 in sleep () from /lib/tls/libc.so.6
#3  0x08057923 in AutoExpire::RunExpirer (this=0x8102da8) at autoexpire.cpp:158
        statbuf = {f_type = 61267, f_bsize = 4096, f_blocks = 19164872, f_bfree = 7126077, f_bavail = 6152538,
  f_files = 9748480, f_ffree = 8909432, f_fsid = {__val = {0, 0}}, f_namelen = 255, f_frsize = 4096, f_spare = {0, 0, 0, 0,
    0}}
        freespace = 23
        minFree = 0
        recordfileprefix = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80f2140, static shared_null = 0x80cc070}
#4  0x08057e65 in AutoExpire::ExpirerThread (param=0x8102da8) at autoexpire.cpp:200
        expirer = (AutoExpire *) 0x8102da8
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 6 (Thread -1265878096 (LWP 28856)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb702409b in __read_nocancel () from /lib/tls/libpthread.so.0
#2  0xb62e16af in vio_read () from /usr/lib/libmysqlclient.so.12
#3  0x00000008 in ?? ()
#4  0x08102e38 in ?? ()
#5  0x00000004 in ?? ()
#6  0xb62e2cba in net_write_command () from /usr/lib/libmysqlclient.so.12
#7  0xb2f09b38 in ?? ()
#8  0xb62e6288 in ?? () from /usr/lib/libmysqlclient.so.12
#9  0xb62e3215 in net_real_write () from /usr/lib/libmysqlclient.so.12
#10 0xffffffff in ?? ()
#11 0x00000000 in ?? ()
#12 0x00000000 in ?? ()
#13 0xb62e2a25 in net_clear () from /usr/lib/libmysqlclient.so.12
#14 0x00000000 in ?? ()
#15 0xb62e3527 in my_net_read () from /usr/lib/libmysqlclient.so.12
#16 0x08102308 in ?? ()
#17 0x00000003 in ?? ()
#18 0x00000000 in ?? ()
#19 0xb62e6288 in ?? () from /usr/lib/libmysqlclient.so.12
#20 0x08102308 in ?? ()
#21 0x00000000 in ?? ()
#22 0x00000000 in ?? ()
#23 0xb62cb0f3 in net_safe_read () from /usr/lib/libmysqlclient.so.12
#24 0x08102308 in ?? ()
#25 0x00000000 in ?? ()
#26 0x012cb21e in ?? ()
#27 0xb62e6288 in ?? () from /usr/lib/libmysqlclient.so.12
#28 0x08102308 in ?? ()
#29 0x08102308 in ?? ()
#30 0xb48c2f48 in ?? ()
#31 0xb62ce279 in mysql_read_query_result () from /usr/lib/libmysqlclient.so.12
#32 0x00000001 in ?? ()
#33 0x00000021 in ?? ()
#34 0xb62ce25e in mysql_read_query_result () from /usr/lib/libmysqlclient.so.12
#35 0xb62ce44c in mysql_real_query () from /usr/lib/libmysqlclient.so.12
#36 0x08102308 in ?? ()
#37 0xb2f09b38 in ?? ()
#38 0x00000052 in ?? ()
#39 0xb7f2d5b4 in ?? () from /usr/qt/3/plugins/sqldrivers/libqsqlmysql.so
#40 0xb48c3060 in ?? ()
#41 0xb7f2d5b4 in ?? () from /usr/qt/3/plugins/sqldrivers/libqsqlmysql.so
#42 0xb48c3060 in ?? ()
#43 0xb7f292ab in QMYSQLResult::reset () from /usr/qt/3/plugins/sqldrivers/libqsqlmysql.so
#44 0xb6bac2e6 in QSqlQuery::exec () from /usr/qt/3/lib/libqt-mt.so.3
#45 0xb72df6b8 in MythContext::GetSetting (this=0x80dfa18, key=@0xb48c3170, defaultval=@0xb48c30e0) at mythcontext.cpp:1520
        querystr = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0xb2f109e8, static shared_null = 0x80cc070}
        found = false
        value = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80cc070, static shared_null = 0x80cc070}
        query = {<> = {<No data fields>}, m_db = 0x80f1fe0, m_isConnected = true, m_returnConnection = true}
#46 0xb72dfdaa in MythContext::GetNumSetting (this=0x80dfa18, key=@0xb48c3170, defaultval=0) at mythcontext.cpp:1557
        val = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0xb2f06e60, static shared_null = 0x80cc070}
        retval = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x0, static shared_null = 0x80cc070}
#47 0x08099094 in Scheduler::FillRecordList (this=0x80f1960) at scheduler.cpp:234
        lockit = {mtx = 0x80fcfe8}
#48 0x0809ce38 in Scheduler::RunScheduler (this=0x80f1960) at scheduler.cpp:905
        msg = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0xb2f06fd8, static shared_null = 0x80cc070}
        statuschanged = false
        recIter = {<std::_List_iterator_base> = {_M_node = 0xb2f02ce8}, <No data fields>}
        prerollseconds = 0
        secsleft = 40021
        nexttv = (EncoderLink *) 0x80facd8
        nextRecording = (ProgramInfo *) 0xb2f16190
        nextrectime = {d = {jd = 2453628}, t = {ds = 72000000}}
        curtime = {d = {jd = 2453628}, t = {ds = 31979715}}
        lastupdate = {d = {jd = 2453628}, t = {ds = 31947277}}
        recordfileprefix = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0xb2f005a8, static shared_null = 0x80cc070}
        startIter = {<std::_List_iterator_base> = {_M_node = 0xb2f02ce8}, <No data fields>}
        blockShutdown = true
        idleSince = {d = {jd = 0}, t = {ds = 0}}
        idleTimeoutSecs = 0
        idleWaitForRecordingTime = 15
        firstRun = false
        fillstart = {tv_sec = 1126702380, tv_usec = 45662}
        fillend = {tv_sec = 1126702380, tv_usec = 45510}
        matchTime = 0.000163000004
        placeTime = 0.137218997
#49 0x0809ff2d in Scheduler::SchedulerThread (param=0x80f1960) at scheduler.cpp:1293
        sched = (Scheduler *) 0x80f1960
#50 0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#51 0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 5 (Thread -1249092688 (LWP 28855)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb70200f1 in pthread_join () from /lib/tls/libpthread.so.0
#2  0xb7c4325d in TVRec::TeardownRecorder (this=0xb58c6008, killFile=false) at tv_rec.cpp:760
        message = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80e22c8, static shared_null = 0x80cc070}
        me = {<QCustomEvent> = {<> = {<No data fields>}, d = 0x0}, message = {static null = {
      static null = <same as static member of an already seen type>, d = 0x80cc070, static shared_null = 0x80cc070},
    d = 0x80e22c8, static shared_null = 0x80cc070}, extradata = {<QValueList<QString>> = {
      sh = 0x812f9d8}, <No data fields>}}
        blank_frame_map = {sh = 0x812bb90}
        oldProfileName = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x8129580, static shared_null = 0x80cc070}
        filelen = 67
#3  0xb7c42230 in TVRec::HandleStateChange (this=0xb58c6008) at tv_rec.cpp:638
        tmpInternalState = kState_None
        changed = true
        startRecorder = false
        closeRecorder = true
        killRecordingFile = false
        statename = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x812bcc0, static shared_null = 0x80cc070}
        origname = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x812b420, static shared_null = 0x80cc070}
#4  0xb7c44128 in TVRec::RunTV (this=0xb58c6008) at tv_rec.cpp:916
#5  0xb7c440c9 in TVRec::EventThread (param=0xb58c6008) at tv_rec.cpp:900
        thetv = (TVRec *) 0xb58c6008
#6  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#7  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 4 (Thread -1257485392 (LWP 28853)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb658c116 in nanosleep () from /lib/tls/libc.so.6
#2  0xb65b4740 in usleep () from /lib/tls/libc.so.6
#3  0xb7cf969b in SIScan::StartScanner (this=0x80fcb68) at siscan.cpp:121
#4  0xb7c3df71 in SpawnScanner (param=0x80fcb68) at tv_rec.cpp:56
        scanner = (class SIScan *) 0x80fcb68
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 2 (Thread -1240441936 (LWP 28850)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb658c116 in nanosleep () from /lib/tls/libc.so.6
#2  0xb65b4740 in usleep () from /lib/tls/libc.so.6
#3  0xb7c44272 in TVRec::RunTV (this=0xb6106008) at tv_rec.cpp:925
#4  0xb7c440c9 in TVRec::EventThread (param=0xb6106008) at tv_rec.cpp:900
        thetv = (TVRec *) 0xb6106008
#5  0xb701faba in start_thread () from /lib/tls/libpthread.so.0
#6  0xb65ba34e in clone () from /lib/tls/libc.so.6

Thread 1 (Thread -1238247200 (LWP 28847)):
#0  0xb6beba04 in QMutex::lock () from /usr/qt/3/lib/libqt-mt.so.3
#1  0x08092b9a in RefSocket::Lock (this=0xb2f10250) at server.h:22
#2  0x08072069 in MainServer::customEvent (this=0xb2f005c0, e=0x812c800) at mainserver.cpp:545
        pbs = (PlaybackSock *) 0x8115678
        sock = (RefSocket *) 0xb2f10250
        sendGlobal = false
        sentSet = {<QGList> = {<> = {<No data fields>}, firstNode = 0xb2f02430, lastNode = 0xb2f02430,
    curNode = 0xb2f02430, curIndex = 0, numNodes = 1, iterators = 0x0}, <No data fields>}
        iter = {<std::iterator<std::random_access_iterator_tag, PlaybackSock*, int, PlaybackSock**, PlaybackSock*&>> = {<No data fields>}, _M_current = 0x80e50b8}
        broadcast = {<QValueList<QString>> = {sh = 0xb2f36f40}, <No data fields>}
        sendstuff = true
#3  0xb6964efd in QObject::event () from /usr/qt/3/lib/libqt-mt.so.3
#4  0xb690f874 in QApplication::internalNotify () from /usr/qt/3/lib/libqt-mt.so.3
#5  0xb690ec2a in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3
#6  0xb6910581 in QApplication::sendPostedEvents () from /usr/qt/3/lib/libqt-mt.so.3
#7  0xb6910418 in QApplication::sendPostedEvents () from /usr/qt/3/lib/libqt-mt.so.3
#8  0xb68bc302 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3
#9  0xb6920d0c in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3
#10 0xb6920bce in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3
#11 0xb690fa7f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3
#12 0x0806cf82 in main (argc=3, argv=0xbfc3f834) at main.cpp:587
        a = <incomplete type>
        logfile = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80df8c0, static shared_null = 0x80cc070}
        binname = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80df8f8, static shared_null = 0x80cc070}
        verboseString = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80df938, static shared_null = 0x80cc070}
        daemonize = false
        printsched = false
        testsched = false
        resched = false
        nosched = false
        printexpire = false
        logfd = -1
        pidfs = <incomplete type>
        port = 6543
        statusport = 6544
        myip = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80ec0b8, static shared_null = 0x80cc070}
        masterip = {static null = {static null = <same as static member of an already seen type>, d = 0x80cc070,
    static shared_null = 0x80cc070}, d = 0x80e9288, static shared_null = 0x80cc070}
        ismaster = true
        runsched = true
(gdb)


More information about the mythtv-dev mailing list