Ticket #7731: delay_unlink_3.patch

File delay_unlink_3.patch, 5.6 KB (added by Jim Stichnoth <stichnot@…>, 11 years ago)
  • programs/mythtranscode/main.cpp

     
    808808    return 0;
    809809}
    810810
     811void WaitToDelete(ProgramInfo *pginfo)
     812{
     813    VERBOSE(VB_GENERAL,
     814            "Transcode: delete old file: "
     815            "waiting while program is in use.");
     816    bool inUse = true;
     817    MSqlQuery query(MSqlQuery::InitCon());
     818    while (inUse)
     819    {
     820        query.prepare("SELECT count(*) FROM inuseprograms "
     821                      "WHERE chanid = :CHANID "
     822                      "AND starttime = :STARTTIME "
     823                      "AND recusage = 'player' ;");
     824        query.bindValue(":CHANID", pginfo->chanid);
     825        query.bindValue(":STARTTIME", pginfo->recstartts);
     826        if (!query.exec() || !query.next())
     827        {
     828            VERBOSE(VB_GENERAL,
     829                    "Transcode: delete old file: in-use query failed;");
     830            inUse = false;
     831        }
     832        else
     833        {
     834            inUse = (query.value(0).toUInt() != 0);
     835        }
     836
     837        if (inUse)
     838        {
     839            const unsigned kSecondsToWait = 10;
     840            VERBOSE(VB_GENERAL,
     841                    QString("Transcode: program in use, "
     842                            "rechecking in %1 seconds.").arg(kSecondsToWait));
     843            sleep(kSecondsToWait);
     844        }
     845    }
     846    VERBOSE(VB_GENERAL, "Transcode: program is no longer in use.");
     847}
     848
    811849int transUnlink(QString filename)
    812850{
    813851    if (gContext->GetNumSetting("TruncateDeletesSlowly", 0))
     
    827865        return;
    828866    }
    829867
     868    WaitToDelete(pginfo);
     869
    830870    const QString filename = pginfo->GetPlaybackURL(false, true);
    831871    const QByteArray fname = filename.toLocal8Bit();
    832872
     
    869909                    .arg(tmpfile).arg(newfile) + ENO);
    870910        }
    871911
    872         if (!gContext->GetNumSetting("SaveTranscoding", 0))
    873         {
    874             int err;
    875             bool followLinks = gContext->GetNumSetting("DeletesFollowLinks", 0);
    876 
    877             VERBOSE(VB_FILE, QString("mythtranscode: About to unlink/delete "
    878                                      "file: %1").arg(oldfile));
    879             QFileInfo finfo(oldfile);
    880             if (followLinks && finfo.isSymLink())
    881             {
    882                 QString link = getSymlinkTarget(oldfile);
    883                 QByteArray alink = link.toLocal8Bit();
    884                 err = transUnlink(alink.constData());
    885 
    886                 if (err)
    887                 {
    888                     VERBOSE(VB_IMPORTANT, QString(
    889                                 "mythtranscode: Error deleting '%1' "
    890                                 "pointed to by '%2'")
    891                             .arg(alink.constData())
    892                             .arg(aoldfile.constData()) + ENO);
    893                 }
    894 
    895                 err = unlink(aoldfile.constData());
    896                 if (err)
    897                 {
    898                     VERBOSE(VB_IMPORTANT, QString(
    899                                 "mythtranscode: Error deleting '%1', "
    900                                 "a link pointing to '%2'")
    901                             .arg(aoldfile.constData())
    902                             .arg(alink.constData()) + ENO);
    903                 }
    904             }
    905             else
    906             {
    907                 if ((err = transUnlink(aoldfile.constData())))
    908                     VERBOSE(VB_IMPORTANT, QString(
    909                             "mythtranscode: Error deleting '%1', %2")
    910                             .arg(oldfile).arg(strerror(errno)));
    911             }
    912         }
    913 
    914912        // Delete previews if cutlist was applied.  They will be re-created as
    915913        // required.  This prevents the user from being stuck with a preview
    916914        // from a cut area and ensures that the "dimensioned" previews
     
    10191017                MythDB::DBError("Error in mythtranscode", query);
    10201018        }
    10211019
     1020        if (!gContext->GetNumSetting("SaveTranscoding", 0))
     1021        {
     1022            int err;
     1023            bool followLinks = gContext->GetNumSetting("DeletesFollowLinks", 0);
     1024
     1025            VERBOSE(VB_FILE, QString("mythtranscode: About to unlink/delete "
     1026                                     "file: %1").arg(oldfile));
     1027            QFileInfo finfo(oldfile);
     1028            if (followLinks && finfo.isSymLink())
     1029            {
     1030                QString link = getSymlinkTarget(oldfile);
     1031                QByteArray alink = link.toLocal8Bit();
     1032                err = transUnlink(alink.constData());
     1033
     1034                if (err)
     1035                {
     1036                    VERBOSE(VB_IMPORTANT, QString(
     1037                                "mythtranscode: Error deleting '%1' "
     1038                                "pointed to by '%2'")
     1039                            .arg(alink.constData())
     1040                            .arg(aoldfile.constData()) + ENO);
     1041                }
     1042
     1043                err = unlink(aoldfile.constData());
     1044                if (err)
     1045                {
     1046                    VERBOSE(VB_IMPORTANT, QString(
     1047                                "mythtranscode: Error deleting '%1', "
     1048                                "a link pointing to '%2'")
     1049                            .arg(aoldfile.constData())
     1050                            .arg(alink.constData()) + ENO);
     1051                }
     1052            }
     1053            else
     1054            {
     1055                if ((err = transUnlink(aoldfile.constData())))
     1056                    VERBOSE(VB_IMPORTANT, QString(
     1057                            "mythtranscode: Error deleting '%1', %2")
     1058                            .arg(oldfile).arg(strerror(errno)));
     1059            }
     1060        }
     1061
    10221062        JobQueue::ChangeJobStatus(jobID, JOB_FINISHED);
    10231063
    10241064    } else {