[mythtv-commits] Ticket #11318: Segfault in mythbackend (mainserver/autoexpire?)

MythTV noreply at mythtv.org
Tue Jan 1 13:29:40 UTC 2013


#11318: Segfault in mythbackend (mainserver/autoexpire?)
-------------------------------+------------------------------------
 Reporter:  verycoldpenguin@…  |           Type:  Bug Report - Crash
   Status:  new                |       Priority:  minor
Milestone:  unknown            |      Component:  MythTV - General
  Version:  Master Head        |       Severity:  medium
 Keywords:                     |  Ticket locked:  0
-------------------------------+------------------------------------
 I am experiencing a segfault in mythbackend, compiled on Centos 6.3 from
 master, using QT 4.8.4 (also present on QT 4.8.3). The setup is non-
 standard, but I believe that this is a generic issue (possibly being hit
 by the fact the system is an edge case).
 Symptoms are a segfault, when the system is relatively idle. I originally
 thought that it was triggered shortly after a recording finished, but,
 after furthther testing this has not been the case. I have not yet been
 able to trigger the fault at will. It is generally repeatable, usually
 between 1-6 hours, I don't think that it has been over 48 hours to trigger
 since I started looking for it.
 Here is a snippet of code from mainserver.cpp which I believe is the
 fault. To me, it would seem that the incrementation of 'it' in the section
 is not needed, and could be the cause. But, I don't see why this isn't
 hitting more people if it is. This is starting at line 4667:
 -----

 {{{
 void MainServer::GetFilesystemInfos(QList<FileSystemInfo> &fsInfos)
 {
     QStringList strlist;
     FileSystemInfo fsInfo;

     fsInfos.clear();

     BackendQueryDiskSpace(strlist, false, true);

     QStringList::const_iterator it = strlist.begin();
     while (it != strlist.end())
     {
         fsInfo.setHostname(*(it++));
         fsInfo.setPath(*(it++));
         fsInfo.setLocal((*(it++)).toInt() > 0);
         fsInfo.setFSysID(-1);
         ++it;
         fsInfo.setGroupID((*(it++)).toInt());
         fsInfo.setBlockSize((*(it++)).toInt());
         fsInfo.setTotalSpace((*(it++)).toLongLong());
         fsInfo.setUsedSpace((*(it++)).toLongLong());
         fsInfo.setWeight(0);
         fsInfos.push_back(fsInfo);
     }
 }}}

 -----
 Snippet from backtrace (full crash attached). Sorry but the line number
 changed (it is the one immediately after the '++it;') in the current head.
 -----

 {{{
 Thread 19 (Thread 0x7fffcebfd700 (LWP 15361)):
 #0  0x00007fffef24ae74 in QLocalePrivate::stringToLongLong(QString const&,
 int, bool*, QLocalePrivate::GroupSeparatorMode) const () from
 /usr/local/Trolltech/Qt-4.8.4/lib/libQtCore.so.4
 No symbol table info available.
 #1  0x00007fffef27219c in QString::toLongLong(bool*, int) const () from
 /usr/local/Trolltech/Qt-4.8.4/lib/libQtCore.so.4
 No symbol table info available.
 #2  0x00007fffef272239 in QString::toInt(bool*, int) const () from
 /usr/local/Trolltech/Qt-4.8.4/lib/libQtCore.so.4
 No symbol table info available.
 #3  0x00000000004948f5 in MainServer::GetFilesystemInfos (this=0x89f140,
 fsInfos=...) at mainserver.cpp:4662
         strlist = {<QList<QString>> = {{p = {static shared_null = {ref =
 {_q_value = 604}, alloc = 0, begin = 0, end = 0, sharable = 1, array =
 {0x0}}, d = 0x7fffa4050520}, d = 0x7fffa4050520}}, <No data fields>}
         __FUNCTION__ = "GetFilesystemInfos"
         fsInfo = {<QObject> = {<No data fields>},
 }}}

 -----

 Both my begin and end are 0, I think that the while line should possibly
 be changed from:
 while (it != strlist.end())
 to:
 while (it < strlist.end())
 And possibly the 'it++;' removed. I don't think that the code should have
 been run anyway though (given that begin and end should both return 0, or
 the same pointer).

-- 
Ticket URL: <http://code.mythtv.org/trac/ticket/11318>
MythTV <http://code.mythtv.org/trac>
MythTV Media Center


More information about the mythtv-commits mailing list