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

MythTV noreply at mythtv.org
Tue Jan 1 17:15:43 UTC 2013


#11318: Segfault in mythbackend (mainserver/autoexpire?)
--------------------------------+-----------------------------
 Reporter:  verycoldpenguin@…   |          Owner:  stuartm
     Type:  Bug Report - Crash  |         Status:  accepted
 Priority:  minor               |      Milestone:  0.26.1
Component:  MythTV - General    |        Version:  Master Head
 Severity:  medium              |     Resolution:
 Keywords:                      |  Ticket locked:  0
--------------------------------+-----------------------------

Comment (by verycoldpenguin@…):

 By applying the following patch, which is as far as I know more
 syntactically correct, then the particular segfault doesn't occur.

 {{{
 diff --git a/mythtv/programs/mythbackend/mainserver.cpp
 b/mythtv/programs/mythbackend/mainserver.cpp
 index f38ba4a..fa13dc8 100644
 --- a/mythtv/programs/mythbackend/mainserver.cpp
 +++ b/mythtv/programs/mythbackend/mainserver.cpp
 @@ -4673,20 +4673,21 @@ void
 MainServer::GetFilesystemInfos(QList<FileSystemInfo> &fsInfos)

      BackendQueryDiskSpace(strlist, false, true);

 -    QStringList::const_iterator it = strlist.begin();
 -    while (it != strlist.end())
 +    QStringList::const_iterator it = strlist.constBegin();
 +
 +    while (it != strlist.constEnd())
      {
 -        fsInfo.setHostname(*(it++));
 -        fsInfo.setPath(*(it++));
 -        fsInfo.setLocal((*(it++)).toInt() > 0);
 +        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.setGroupID((*(it)).toInt());
 +        fsInfo.setBlockSize((*(it)).toInt());
 +        fsInfo.setTotalSpace((*(it)).toLongLong());
 +        fsInfo.setUsedSpace((*(it)).toLongLong());
          fsInfo.setWeight(0);
          fsInfos.push_back(fsInfo);
 +        ++it;
      }

      LOG(VB_SCHEDULE | VB_FILE, LOG_DEBUG, "Determining unique
 filesystems");

 }}}

 However, a similar segfault now occurs at 4589  (void
 MainServer::BackendQueryDiskSpace()):

 {{{
 ...
     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;   // Without this, the strlist gets out of whack
  4589:       fsInfo.setGroupID((*(it++)).toInt());
         fsInfo.setBlockSize((*(it++)).toInt());
         fsInfo.setTotalSpace((*(it++)).toLongLong());
         fsInfo.setUsedSpace((*(it++)).toLongLong());
         fsInfos.push_back(fsInfo);
     }
     strlist.clear();
 }}}

 I don't know git very well, is there any way of finding out who added the
 comment at 4588: ++it;? It seems to me a line asking for trouble, but
 intentionally added.

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


More information about the mythtv-commits mailing list