From a69f4e66e694f53955cfdbaf91069eb15ddac7bb Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Mon, 8 Apr 2013 19:38:50 +0100 Subject: [PATCH] dvr: attempt to stop new DVR code creating false entries (cherry picked from commit 9abf21525aade2f7bb54cc931960270237048b53) Conflicts: src/dvr/dvr_db.c --- src/dvr/dvr_db.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 100400c2..eb0aba15 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -804,17 +804,27 @@ dvr_event_replaced(epg_broadcast_t *e, epg_broadcast_t *new_e) /* Existing entry */ if ((de = dvr_entry_find_by_event(e))) { + /* Ignore - already in progress */ + if (de->de_sched_state != DVR_SCHEDULED) + return; + /* Unlink the broadcast */ e->putref(e); de->de_bcast = NULL; + /* If this was craeted by autorec - just remove it, it'll get recreated */ + if (de->de_autorec) { + dvr_entry_remove(de); + /* Find match */ - RB_FOREACH(e, &e->channel->ch_epg_schedule, sched_link) { - if (dvr_entry_fuzzy_match(de, e)) { - e->getref(e); - de->de_bcast = e; - _dvr_entry_update(de, e, NULL, NULL, NULL, 0, 0, 0, 0); - break; + } else { + RB_FOREACH(e, &e->channel->ch_epg_schedule, sched_link) { + if (dvr_entry_fuzzy_match(de, e)) { + e->getref(e); + de->de_bcast = e; + _dvr_entry_update(de, e, NULL, NULL, NULL, 0, 0, 0, 0); + break; + } } } }