Ticket #1835: gradual-delete.patch

File gradual-delete.patch, 2.6 KB (added by bolek-mythtv@…, 6 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);