Ticket #1835: gradual-delete.patch

File gradual-delete.patch, 2.6 KB (added by bolek-mythtv@…, 18 years ago)
  • programs/mythbackend/mainserver.cpp

     
    13411341    if (followLinks)
    13421342    {
    13431343        QFileInfo finfo(filename);
    1344         if (finfo.isSymLink() && (err = unlink(finfo.readLink().local8Bit())))
     1344        if (finfo.isSymLink() && (err = GradualDelete(finfo.readLink())))
    13451345        {
    13461346            VERBOSE(VB_IMPORTANT, QString("Error deleting '%1' @ '%2', %3")
    13471347                    .arg(filename).arg(finfo.readLink().local8Bit())
    13481348                    .arg(strerror(errno)));
    13491349        }
     1350        if ((err = unlink(filename.local8Bit())))
     1351            VERBOSE(VB_IMPORTANT, QString("Error deleting '%1', %2")
     1352                    .arg(filename).arg(strerror(errno)));
    13501353    }
    1351     if ((err = unlink(filename.local8Bit())))
    1352         VERBOSE(VB_IMPORTANT, QString("Error deleting '%1', %2")
    1353                 .arg(filename).arg(strerror(errno)));
     1354    else
     1355    {
     1356        if ((err = GradualDelete(filename)))
     1357            VERBOSE(VB_IMPORTANT, QString("Error deleting '%1', %2")
     1358                    .arg(filename).arg(strerror(errno)));
     1359    }
    13541360   
    13551361    sleep(2);
    13561362
     
    14741480    deletelock.unlock();
    14751481}
    14761482
     1483// Gradually delete a file by repeatedly truncating it. Helps to spread
     1484// the I/O load on some filesystems (e.g ext3).
     1485int MainServer::GradualDelete(QString filename)
     1486{
     1487    int err, increment;
     1488    struct stat buf;
     1489
     1490    if ((increment = gContext->GetNumSetting("GradualDeleteIncrement", 0)) > 0)
     1491    {
     1492        while (1)
     1493        {
     1494            // Get the file size. We can't use QFileInfo.size() because
     1495            // it's only 32-bit (at least in QT3).
     1496            stat(filename.local8Bit(), &buf);
     1497            if (buf.st_size <= increment) break;
     1498
     1499            if ((err = truncate(filename.local8Bit(), buf.st_size - increment)))
     1500                return err;
     1501           
     1502            sleep(2);
     1503        }
     1504    }
     1505
     1506    return unlink(filename.local8Bit());
     1507}
     1508
    14771509void MainServer::HandleCheckRecordingActive(QStringList &slist,
    14781510                                            PlaybackSock *pbs)
    14791511{
  • programs/mythbackend/mainserver.h

     
    142142
    143143    static void *SpawnDeleteThread(void *param);
    144144    void DoDeleteThread(DeleteStruct *ds);
     145    int GradualDelete(QString filename);
    145146
    146147    LiveTVChain *GetExistingChain(QString id);
    147148    LiveTVChain *GetExistingChain(QSocket *sock);