Issue #1453 - Fix autorec init issue (duplicate entries)

With previous init change, the scheduled events may be duplicated. Split
the dvr_autorec_init() to two phases:

1) load the autorec list
2) update the scheduled events after dvr db is initialized
This commit is contained in:
Jaroslav Kysela 2012-12-12 14:45:27 +01:00 committed by Adam Sutton
parent 86fac417c2
commit 4419dde14b
3 changed files with 18 additions and 1 deletions

View file

@ -280,6 +280,8 @@ void dvr_init(void);
void dvr_autorec_init(void);
void dvr_autorec_update(void);
void dvr_destroy_by_channel(channel_t *ch);
void dvr_rec_subscribe(dvr_entry_t *de);

View file

@ -38,6 +38,8 @@ dtable_t *autorec_dt;
TAILQ_HEAD(dvr_autorec_entry_queue, dvr_autorec_entry);
static int dvr_autorec_in_init = 0;
struct dvr_autorec_entry_queue autorec_entries;
static void dvr_autorec_changed(dvr_autorec_entry_t *dae);
@ -422,7 +424,8 @@ autorec_record_update(void *opaque, const char *id, htsmsg_t *values,
if (dae->dae_serieslink)
dae->dae_serieslink->getref(dae->dae_serieslink);
}
dvr_autorec_changed(dae);
if (!dvr_autorec_in_init)
dvr_autorec_changed(dae);
return autorec_record_build(dae);
}
@ -465,7 +468,18 @@ dvr_autorec_init(void)
{
TAILQ_INIT(&autorec_entries);
autorec_dt = dtable_create(&autorec_dtc, "autorec", NULL);
dvr_autorec_in_init = 1;
dtable_load(autorec_dt);
dvr_autorec_in_init = 0;
}
void
dvr_autorec_update(void)
{
dvr_autorec_entry_t *dae;
TAILQ_FOREACH(dae, &autorec_entries, dae_link) {
dvr_autorec_changed(dae);
}
}
static void

View file

@ -1036,6 +1036,7 @@ dvr_init(void)
dvr_autorec_init();
dvr_db_load();
dvr_autorec_update();
}
/**