summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Eskola <timo@tolleri.net>2018-09-03 09:54:41 +0300
committerTimo Eskola <timo@tolleri.net>2018-09-03 09:54:41 +0300
commit143c520f9894e777b95a72a65b1261922001c7b0 (patch)
tree9a27c38c2e6ebc5c5d63149e5bec4fffbe4c1731
parente793e61250bc01c5c8ab30c61ee88b38ffe56429 (diff)
downloadvdr-plugin-duplicates-143c520f9894e777b95a72a65b1261922001c7b0.tar.gz
vdr-plugin-duplicates-143c520f9894e777b95a72a65b1261922001c7b0.tar.bz2
Wait if recordings state changed while scanning.
-rw-r--r--recording.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/recording.c b/recording.c
index 6dee18c..e670289 100644
--- a/recording.c
+++ b/recording.c
@@ -119,7 +119,7 @@ void cDuplicateRecordingScannerThread::Action(void) {
Scan();
}
if (Running())
- cCondWait::SleepMs(250);
+ cCondWait::SleepMs(500);
}
}
@@ -171,16 +171,15 @@ void cDuplicateRecordingScannerThread::Scan(void) {
duplicates.Add(descriptionless);
} else
delete descriptionless;
+ if (RecordingsStateChanged())
+ return;
cStateKey duplicateRecordingsStateKey;
DuplicateRecordings.Lock(duplicateRecordingsStateKey, true);
- if (!RecordingsStateChanged()) {
- DuplicateRecordings.Clear();
- for (cDuplicateRecording *duplicate = duplicates.First(); duplicate; duplicate = duplicates.Next(duplicate)) {
- DuplicateRecordings.Add(new cDuplicateRecording(*duplicate));
- }
- duplicateRecordingsStateKey.Remove();
- } else
- duplicateRecordingsStateKey.Remove(false);
+ DuplicateRecordings.Clear();
+ for (cDuplicateRecording *duplicate = duplicates.First(); duplicate; duplicate = duplicates.Next(duplicate)) {
+ DuplicateRecordings.Add(new cDuplicateRecording(*duplicate));
+ }
+ duplicateRecordingsStateKey.Remove();
gettimeofday(&stopTime, NULL);
double seconds = (((long long)stopTime.tv_sec * 1000000 + stopTime.tv_usec) - ((long long)startTime.tv_sec * 1000000 + startTime.tv_usec)) / 1000000.0;
dsyslog("duplicates: Scanning of duplicates took %.2f seconds.", seconds);
@@ -191,6 +190,7 @@ bool cDuplicateRecordingScannerThread::RecordingsStateChanged(void) {
recordingsStateKey.Reset();
recordingsStateKey.Remove();
dsyslog("duplicates: Recordings state changed while scanning.");
+ cCondWait::SleepMs(500);
return true;
}
return false;