Ticket #5532: autoexpire-bandaid.patch

File autoexpire-bandaid.patch, 5.0 KB (added by jppoet@…, 16 years ago)

shot in the dark - possible band-aid for this crash

  • programs/mythbackend/autoexpire.cpp

     
    332332    pginfolist_t expireList;
    333333
    334334    VERBOSE(VB_FILE, LOC + QString("ExpireLiveTV(%1)").arg(type));
    335     FillDBOrdered(expireList, type);
    336     SendDeleteMessages(expireList);
    337     ClearExpireList(expireList);
     335    if (FillDBOrdered(expireList, type))
     336    {
     337        SendDeleteMessages(expireList);
     338        ClearExpireList(expireList);
     339    }
    338340}
    339341
    340342/** \fn AutoExpire::ExpireOldDeleted(void)
     
    345347    pginfolist_t expireList;
    346348
    347349    VERBOSE(VB_FILE, LOC + QString("ExpireOldDeleted()"));
    348     FillDBOrdered(expireList, emOldDeletedPrograms);
    349     SendDeleteMessages(expireList);
    350     ClearExpireList(expireList);
     350    if (FillDBOrdered(expireList, emOldDeletedPrograms))
     351    {
     352        SendDeleteMessages(expireList);
     353        ClearExpireList(expireList);
     354    }
    351355}
    352356
    353357/** \fn AutoExpire::ExpireRecordings()
     
    714718 *  \brief Uses the "AutoExpireMethod" setting in the database to
    715719 *         fill the list of files that are deletable.
    716720 */
    717 void AutoExpire::FillExpireList(pginfolist_t &expireList)
     721bool AutoExpire::FillExpireList(pginfolist_t &expireList)
    718722{
    719723    int expMethod = gContext->GetNumSetting("AutoExpireMethod", 1);
    720724
    721725    ClearExpireList(expireList);
    722726
    723     FillDBOrdered(expireList, emNormalDeletedPrograms);
     727    if (!FillDBOrdered(expireList, emNormalDeletedPrograms))
     728        return false;
    724729
    725730    switch(expMethod)
    726731    {
    727732        case emOldestFirst:
    728733        case emLowestPriorityFirst:
    729734        case emWeightedTimePriority:
    730                 FillDBOrdered(expireList, expMethod);
    731                 break;
     735          if (!FillDBOrdered(expireList, expMethod))
     736              return false;
     737          break;
    732738        // default falls through so list is empty so no AutoExpire
    733739    }
     740
     741    return true;
    734742}
    735743
    736744/** \fn AutoExpire::PrintExpireList(QString)
     
    842850 *  \brief Creates a list of programs to delete using the database to
    843851 *         order list.
    844852 */
    845 void AutoExpire::FillDBOrdered(pginfolist_t &expireList, int expMethod)
     853bool AutoExpire::FillDBOrdered(pginfolist_t &expireList, int expMethod)
    846854{
    847855    QString where;
    848856    QString orderby;
     
    891899            break;
    892900        case emOldDeletedPrograms:
    893901            if ((maxAge = gContext->GetNumSetting("DeletedMaxAge", 0)) == 0)
    894                 return;
     902                return true;
    895903            msg = QString("Adding programs deleted more than %1 days ago")
    896904                          .arg(maxAge);
    897905            where = QString("recgroup = 'Deleted' "
     
    901909            break;
    902910        case emNormalDeletedPrograms:
    903911            if (gContext->GetNumSetting("DeletedFifoOrder", 0) == 0)
    904                 return;
     912                return true;
    905913            msg = "Adding deleted programs in FIFO order";
    906914            where = "recgroup = 'Deleted'";
    907915            orderby = "lastmodified ASC";
     
    910918
    911919    VERBOSE(VB_FILE, LOC + "FillDBOrdered: " + msg);
    912920
    913     MSqlQuery query(MSqlQuery::InitCon());
     921    MSqlQueryInfo qi = MSqlQuery::InitCon();
     922    if (qi.db == 0)
     923    {
     924        VERBOSE(VB_IMPORTANT,
     925                "AutoExpire::FillDBOrdered: MSqlQuery::InitCon failed!");
     926        return false;
     927    }
     928    MSqlQuery query(qi);
    914929    QString querystr = QString(
    915930               "SELECT recorded.chanid, starttime,   endtime,     "
    916931               "       title,           subtitle,    description, "
     
    927942    query.prepare(querystr);
    928943
    929944    if (!query.exec() || !query.isActive() || !query.size())
    930         return;
     945        return false;
    931946
    932947    while (query.next())
    933948    {
     
    9881003                                       .arg(proginfo->recstartts.toString()));
    9891004        expireList.push_back(proginfo);
    9901005    }
     1006
     1007    return true;
    9911008}
    9921009
    9931010/** \fn SpawnUpdateThread(void*)
  • programs/mythbackend/autoexpire.h

     
    6464    void ExpireRecordings(void);
    6565    void ExpireEpisodesOverMax(void);
    6666
    67     void FillExpireList(pginfolist_t &expireList);
    68     void FillDBOrdered(pginfolist_t &expireList, int expMethod);
     67    bool FillExpireList(pginfolist_t &expireList);
     68    bool FillDBOrdered(pginfolist_t &expireList, int expMethod);
    6969    void SendDeleteMessages(pginfolist_t &deleteList);
    7070    void ClearExpireList(pginfolist_t &expireList, bool deleteProg = true);
    7171    void Sleep(int sleepTime);
  • libs/libmythdb/mythdbcon.h

     
    7272    MSqlDatabase *db;
    7373    QSqlDatabase qsqldb;
    7474    bool returnConnection;
     75
     76    _MSqlQueryInfo(void) { db = 0; }
    7577} MSqlQueryInfo;
    7678
    7779/// \brief typedef for a map of string -> string bindings for generic queries.