if (now >= stop || de->de_dont_reschedule) {
/* EPG thinks that the program is running */
- if(de->de_running_start > de->de_running_stop) {
+ if(de->de_running_start > de->de_running_stop && !de->de_dont_reschedule) {
stop = dispatch_clock + 10;
- goto recording;
+ if (de->de_sched_state == DVR_RECORDING)
+ goto recording;
}
/* Files are missing and job was completed */
if (n) {
if(de->de_sched_state == DVR_RECORDING) {
- de->de_dont_reschedule = 1;
dvr_stop_recording(de, SM_CODE_SOURCE_RECONFIGURED, 1, 1);
dvr_rec_migrate(de, n);
n->de_start = dispatch_clock;
atomic_exchange_time_t(&de->de_running_stop, dispatch_clock);
atomic_exchange_time_t(&de->de_running_pause, 0);
if (de->de_sched_state == DVR_RECORDING && de->de_running_start) {
- de->de_dont_reschedule = 1;
dvr_stop_recording(de, SM_CODE_OK, 0, 0);
tvhdebug("dvr", "dvr entry %s %s %s on %s - EPG stop",
idnode_uuid_as_str(&de->de_id, ubuf), srcname,
if (!clone)
dvr_rec_unsubscribe(de);
+ de->de_dont_reschedule = 1;
+
if (stopcode != SM_CODE_INVALID_TARGET &&
(rec_state == DVR_RS_PENDING ||
rec_state == DVR_RS_WAIT_PROGRAM_START ||
static void
dvr_entry_purge(dvr_entry_t *de, int delconf)
{
- if(de->de_sched_state == DVR_RECORDING)
+ int dont_reschedule;
+
+ if(de->de_sched_state == DVR_RECORDING) {
+ dont_reschedule = de->de_dont_reschedule;
dvr_stop_recording(de, SM_CODE_SOURCE_DELETED, delconf, 0);
+ if (!delconf)
+ de->de_dont_reschedule = dont_reschedule;
+ }
}
dvr_entry_stop(dvr_entry_t *de)
{
if(de->de_sched_state == DVR_RECORDING) {
- de->de_dont_reschedule = 1;
dvr_stop_recording(de, SM_CODE_OK, 1, 0);
return de;
}
switch(de->de_sched_state) {
case DVR_RECORDING:
- de->de_dont_reschedule = 1;
dvr_stop_recording(de, SM_CODE_ABORTED, 1, 0);
break;
switch(de->de_sched_state) {
case DVR_RECORDING:
- de->de_dont_reschedule = 1;
dvr_stop_recording(de, SM_CODE_ABORTED, 1, 0);
case DVR_COMPLETED:
dvr_entry_delete(de, 1);