]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
epggrab: channel - fix the wrong cross-link lists management, fixes #3222
authorJaroslav Kysela <perex@perex.cz>
Thu, 5 Nov 2015 20:26:55 +0000 (21:26 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 5 Nov 2015 20:26:55 +0000 (21:26 +0100)
src/epggrab/channel.c
src/epggrab/module/pyepg.c
src/epggrab/module/xmltv.c

index 1cc8f5479c182afc8cbd072067fd406897f00c1a..125d650b2a2f4ea0328a7ba4494e60135389d8a5 100644 (file)
@@ -107,6 +107,16 @@ int epggrab_channel_match_number ( epggrab_channel_t *ec, channel_t *ch )
   return 0;
 }
 
+/* Delete ilm */
+static void
+_epgggrab_channel_link_delete(idnode_list_mapping_t *ilm, int delconf)
+{
+  epggrab_channel_t *ec = (epggrab_channel_t *)ilm->ilm_in1;
+  channel_t *ch = (channel_t *)ilm->ilm_in2;
+  tvhdebug(ec->mod->id, "unlinking %s from %s",
+           ec->id, channel_get_name(ch));
+  idnode_list_unlink(ilm, delconf ? ec : NULL);
+}
 
 /* Destroy */
 void
@@ -114,9 +124,9 @@ epggrab_channel_link_delete
   ( epggrab_channel_t *ec, channel_t *ch, int delconf )
 {
   idnode_list_mapping_t *ilm;
-  LIST_FOREACH(ilm, &ec->channels, ilm_in2_link)
+  LIST_FOREACH(ilm, &ec->channels, ilm_in1_link)
     if (ilm->ilm_in1 == &ec->idnode && ilm->ilm_in2 == &ch->ch_id) {
-      idnode_list_unlink(ilm, NULL);
+      _epgggrab_channel_link_delete(ilm, delconf);
       return;
     }
 }
@@ -126,7 +136,7 @@ static void epggrab_channel_links_delete( epggrab_channel_t *ec, int delconf )
 {
   idnode_list_mapping_t *ilm;
   while ((ilm = LIST_FIRST(&ec->channels)))
-    idnode_list_unlink(ilm, delconf ? ec : NULL);
+    _epgggrab_channel_link_delete(ilm, delconf);
 }
 
 /* Link epggrab channel to real channel */
@@ -140,7 +150,7 @@ epggrab_channel_link ( epggrab_channel_t *ec, channel_t *ch, void *origin )
   if (!ch || !ch->ch_enabled) return 0;
 
   /* Already linked */
-  LIST_FOREACH(ilm, &ec->channels, ilm_in2_link)
+  LIST_FOREACH(ilm, &ec->channels, ilm_in1_link)
     if (ilm->ilm_in2 == &ch->ch_id)
       return 0;
 
@@ -185,7 +195,7 @@ int epggrab_channel_set_name ( epggrab_channel_t *ec, const char *name )
     if (ec->name) free(ec->name);
     ec->name = strdup(name);
     if (epggrab_conf.channel_rename) {
-      LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
+      LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
         ch = (channel_t *)ilm->ilm_in2;
         if (channel_set_name(ch, name))
           channel_save(ch);
@@ -211,7 +221,7 @@ int epggrab_channel_set_icon ( epggrab_channel_t *ec, const char *icon )
     if (ec->icon) free(ec->icon);
     ec->icon = strdup(icon);
     if (epggrab_conf.channel_reicon) {
-      LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
+      LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
         ch = (channel_t *)ilm->ilm_in2;
         if (channel_set_icon(ch, icon))
           channel_save(ch);
@@ -235,7 +245,7 @@ int epggrab_channel_set_number ( epggrab_channel_t *ec, int major, int minor )
   if (ec->lcn != lcn) {
     ec->lcn = lcn;
     if (epggrab_conf.channel_renumber) {
-      LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
+      LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
         ch = (channel_t *)ilm->ilm_in2;
         if (channel_set_number(ch,
                                lcn / CHANNEL_SPLIT,
@@ -620,7 +630,7 @@ epggrab_channel_class_only_one_notify ( void *obj, const char *lang )
   idnode_list_mapping_t *ilm1, *ilm2;
   if (ec->only_one) {
     for(ilm1 = LIST_FIRST(&ec->channels); ilm1; ilm1 = ilm2) {
-      ilm2 = LIST_NEXT(ilm1, ilm_in2_link);
+      ilm2 = LIST_NEXT(ilm1, ilm_in1_link);
       ch = (channel_t *)ilm1->ilm_in2;
       if (!first)
         first = ch;
index 1d28dbcf0f13699d6ac404c68189177a449e93a8..1d76da491e585a3d0cde0d699e864fedb85a0aea 100644 (file)
@@ -355,7 +355,7 @@ static int _pyepg_parse_schedule
   HTSMSG_FOREACH(f, tags) {
     if (strcmp(f->hmf_name, "broadcast") == 0) {
       ec->laststamp = dispatch_clock;
-      LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
+      LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
         ch = (channel_t *)ilm->ilm_in2;
         if (!ch->ch_enabled || ch->ch_epg_parent) continue;
         save |= _pyepg_parse_broadcast(mod, htsmsg_get_map_by_field(f),
index 47faf28662191a15dd4e1800438e9763d4b993e8..851517890de62191815485a90c9176ae99c69982 100644 (file)
@@ -597,7 +597,7 @@ static int _xmltv_parse_programme
   if(stop <= start || stop <= dispatch_clock) return 0;
 
   ec->laststamp = dispatch_clock;
-  LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
+  LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
     ch = (channel_t *)ilm->ilm_in2;
     if (!ch->ch_enabled || ch->ch_epg_parent) continue;
     save |= _xmltv_parse_programme_tags(mod, ch, tags,