From 35d4ceaf371e5f19a41ba700bee4d5aaf2f15b64 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 18 Jan 2014 12:54:56 +0100 Subject: [PATCH] Fixed deleting the source recording after moving it to a different volume (cont'd) --- recording.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/recording.c b/recording.c index d57e3f58..382a8ea2 100644 --- a/recording.c +++ b/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 3.12 2014/01/16 11:03:41 kls Exp $ + * $Id: recording.c 3.13 2014/01/18 12:54:56 kls Exp $ */ #include "recording.h" @@ -1519,22 +1519,24 @@ void cRecordings::DelByName(const char *FileName) { LOCK_THREAD; cRecording *recording = GetByName(FileName); - if (recording) { - cThreadLock DeletedRecordingsLock(&DeletedRecordings); + cRecording *dummy = NULL; + if (!recording) + recording = dummy = new cRecording(FileName); // allows us to use a FileName that is not in the Recordings list + cThreadLock DeletedRecordingsLock(&DeletedRecordings); + if (!dummy) Del(recording, false); - char *ext = strrchr(recording->fileName, '.'); - if (ext) { - strncpy(ext, DELEXT, strlen(ext)); - if (access(recording->FileName(), F_OK) == 0) { - recording->deleted = time(NULL); - DeletedRecordings.Add(recording); - recording = NULL; // to prevent it from being deleted below - } + char *ext = strrchr(recording->fileName, '.'); + if (ext) { + strncpy(ext, DELEXT, strlen(ext)); + if (access(recording->FileName(), F_OK) == 0) { + recording->deleted = time(NULL); + DeletedRecordings.Add(recording); + recording = NULL; // to prevent it from being deleted below } - delete recording; - ChangeState(); - TouchUpdate(); } + delete recording; + ChangeState(); + TouchUpdate(); } void cRecordings::UpdateByName(const char *FileName) @@ -1880,7 +1882,7 @@ bool cRecordingsHandlerEntry::Active(bool &Error) if (CopierFinishedOk && (Usage() & ruMove) != 0) { cRecording Recording(FileNameSrc()); if (Recording.Delete()) - DeletedRecordings.AddByName(Recording.FileName()); + Recordings.DelByName(Recording.FileName()); } Recordings.ChangeState(); Recordings.TouchUpdate();