Ticket #1835: gradual-delete.patch
File gradual-delete.patch, 2.6 KB (added by , 18 years ago) |
---|
-
programs/mythbackend/mainserver.cpp
1341 1341 if (followLinks) 1342 1342 { 1343 1343 QFileInfo finfo(filename); 1344 if (finfo.isSymLink() && (err = unlink(finfo.readLink().local8Bit())))1344 if (finfo.isSymLink() && (err = GradualDelete(finfo.readLink()))) 1345 1345 { 1346 1346 VERBOSE(VB_IMPORTANT, QString("Error deleting '%1' @ '%2', %3") 1347 1347 .arg(filename).arg(finfo.readLink().local8Bit()) 1348 1348 .arg(strerror(errno))); 1349 1349 } 1350 if ((err = unlink(filename.local8Bit()))) 1351 VERBOSE(VB_IMPORTANT, QString("Error deleting '%1', %2") 1352 .arg(filename).arg(strerror(errno))); 1350 1353 } 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 } 1354 1360 1355 1361 sleep(2); 1356 1362 … … 1474 1480 deletelock.unlock(); 1475 1481 } 1476 1482 1483 // Gradually delete a file by repeatedly truncating it. Helps to spread 1484 // the I/O load on some filesystems (e.g ext3). 1485 int 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 1477 1509 void MainServer::HandleCheckRecordingActive(QStringList &slist, 1478 1510 PlaybackSock *pbs) 1479 1511 { -
programs/mythbackend/mainserver.h
142 142 143 143 static void *SpawnDeleteThread(void *param); 144 144 void DoDeleteThread(DeleteStruct *ds); 145 int GradualDelete(QString filename); 145 146 146 147 LiveTVChain *GetExistingChain(QString id); 147 148 LiveTVChain *GetExistingChain(QSocket *sock);