]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Issue #1453 - Fix autorec init issue (duplicate entries)
authorJaroslav Kysela <perex@perex.cz>
Wed, 12 Dec 2012 13:45:27 +0000 (14:45 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Thu, 13 Dec 2012 21:10:55 +0000 (21:10 +0000)
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

src/dvr/dvr.h
src/dvr/dvr_autorec.c
src/dvr/dvr_db.c

index 604400a2bc736b848776d1b3a05179d59c34d3c4..7046362b13a609341cdc20d575af8143fa387754 100644 (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);
index 4eff0435a78620997b3d39dbdb8bc0ab37274bc4..defb0e392f5f20ead1ccb3f8d5dd5f0fc88b62c8 100644 (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
index 8560fbc08a00d484c643c9ba6585110c0d1b78c4..70bdabcc162044096143d4a27243a10417512079 100644 (file)
@@ -1036,6 +1036,7 @@ dvr_init(void)
 
   dvr_autorec_init();
   dvr_db_load();
+  dvr_autorec_update();
 }
 
 /**