mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Now avoiding unnecessary disk access when checking if there are deleted recordings that need to be removed; fixed handling the DELETEDLIFETIME
This commit is contained in:
parent
579719a7f2
commit
78990eb188
@ -16,6 +16,8 @@ Carsten Koch <Carsten.Koch@icem.de>
|
||||
for fixing converting summary.vdr files that would result in a very long 'short text'
|
||||
for his help in testing and debugging reading the list of recordings in a
|
||||
separate thread
|
||||
for reporting some unnecessary disk access when checking if there are deleted
|
||||
recordings that need to be removed
|
||||
|
||||
Plamen Ganev <pganev@com-it.net>
|
||||
for fixing the frequency offset for Hotbird channels
|
||||
|
5
HISTORY
5
HISTORY
@ -3979,3 +3979,8 @@ Video Disk Recorder Revision History
|
||||
- When displaying the amount of free disk space, the space consumed by
|
||||
recordings that have been "deleted" but not yet actually "removed" is now
|
||||
taken into account (suggested by Christian Vogt).
|
||||
- Now avoiding unnecessary disk access when checking if there are deleted
|
||||
recordings that need to be removed (reported by Carsten Koch).
|
||||
- Fixed handling the DELETEDLIFETIME when removing deleted recordings. Now
|
||||
a deleted recording is retained at least DELETEDLIFETIME seconds before
|
||||
actually removing it (unless a new recording requires the disk space).
|
||||
|
45
recording.c
45
recording.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: recording.c 1.125 2005/12/17 13:30:50 kls Exp $
|
||||
* $Id: recording.c 1.126 2005/12/18 12:06:36 kls Exp $
|
||||
*/
|
||||
|
||||
#include "recording.h"
|
||||
@ -48,8 +48,8 @@
|
||||
|
||||
#define MINDISKSPACE 1024 // MB
|
||||
|
||||
#define DELETEDLIFETIME 1 // hours after which a deleted recording will be actually removed
|
||||
#define REMOVECHECKDELTA 3600 // seconds between checks for removing deleted files
|
||||
#define REMOVECHECKDELTA 60 // seconds between checks for removing deleted files
|
||||
#define DELETEDLIFETIME 3600 // seconds after which a deleted recording will be actually removed
|
||||
#define DISKCHECKDELTA 100 // seconds between checks for free disk space
|
||||
#define REMOVELATENCY 10 // seconds to wait until next check after removing a file
|
||||
|
||||
@ -65,35 +65,19 @@ cRecordings DeletedRecordings(true);
|
||||
void RemoveDeletedRecordings(void)
|
||||
{
|
||||
static time_t LastRemoveCheck = 0;
|
||||
if (LastRemoveCheck == 0) {
|
||||
DeletedRecordings.Update();
|
||||
LastRemoveCheck = time(NULL) - REMOVECHECKDELTA * 9 / 10;
|
||||
}
|
||||
else if (time(NULL) - LastRemoveCheck > REMOVECHECKDELTA) {
|
||||
if (time(NULL) - LastRemoveCheck > REMOVECHECKDELTA) {
|
||||
cThreadLock DeletedRecordingsLock(&DeletedRecordings);
|
||||
for (cRecording *r = DeletedRecordings.First(); r; r = DeletedRecordings.Next(r)) {
|
||||
if (r->deleted && time(NULL) - r->deleted > DELETEDLIFETIME) {
|
||||
// Make sure only one instance of VDR does this:
|
||||
cLockFile LockFile(VideoDirectory);
|
||||
if (!LockFile.Lock())
|
||||
return;
|
||||
// Remove the oldest file that has been "deleted":
|
||||
cThreadLock DeletedRecordingsLock(&DeletedRecordings);
|
||||
if (DeletedRecordings.Count()) {
|
||||
cRecording *r = DeletedRecordings.First();
|
||||
cRecording *r0 = r;
|
||||
while (r) {
|
||||
if (r->start < r0->start)
|
||||
r0 = r;
|
||||
r = DeletedRecordings.Next(r);
|
||||
}
|
||||
if (r0 && time(NULL) - r0->start > DELETEDLIFETIME * 3600) {
|
||||
r0->Remove();
|
||||
DeletedRecordings.Del(r0);
|
||||
if (LockFile.Lock()) {
|
||||
r->Remove();
|
||||
DeletedRecordings.Del(r);
|
||||
RemoveEmptyVideoDirectories();
|
||||
LastRemoveCheck += REMOVELATENCY;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
DeletedRecordings.Update();
|
||||
}
|
||||
LastRemoveCheck = time(NULL);
|
||||
}
|
||||
}
|
||||
@ -401,6 +385,7 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
|
||||
fileName = NULL;
|
||||
name = NULL;
|
||||
fileSizeMB = -1; // unknown
|
||||
deleted = 0;
|
||||
// set up the actual name:
|
||||
const char *Title = Event ? Event->Title() : NULL;
|
||||
const char *Subtitle = Event ? Event->ShortText() : NULL;
|
||||
@ -455,6 +440,7 @@ cRecording::cRecording(const char *FileName)
|
||||
{
|
||||
resume = RESUME_NOT_INITIALIZED;
|
||||
fileSizeMB = -1; // unknown
|
||||
deleted = 0;
|
||||
titleBuffer = NULL;
|
||||
sortBuffer = NULL;
|
||||
fileName = strdup(FileName);
|
||||
@ -816,8 +802,10 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground)
|
||||
Add(r);
|
||||
ChangeState();
|
||||
Unlock();
|
||||
if (deleted)
|
||||
if (deleted) {
|
||||
r->fileSizeMB = DirSizeMB(buffer);
|
||||
r->deleted = time(NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
delete r;
|
||||
@ -893,6 +881,7 @@ void cRecordings::DelByName(const char *FileName)
|
||||
if (ext) {
|
||||
strncpy(ext, DELEXT, strlen(ext));
|
||||
recording->fileSizeMB = DirSizeMB(recording->FileName());
|
||||
recording->deleted = time(NULL);
|
||||
DeletedRecordings.Add(recording);
|
||||
}
|
||||
else
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: recording.h 1.47 2005/12/17 13:30:50 kls Exp $
|
||||
* $Id: recording.h 1.48 2005/12/18 11:26:51 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __RECORDING_H
|
||||
@ -71,6 +71,7 @@ public:
|
||||
time_t start;
|
||||
int priority;
|
||||
int lifetime;
|
||||
time_t deleted;
|
||||
cRecording(cTimer *Timer, const cEvent *Event);
|
||||
cRecording(const char *FileName);
|
||||
virtual ~cRecording();
|
||||
|
Loading…
Reference in New Issue
Block a user