]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
idnode: fix the idnode_list_mapping - save activation, fixes #3163
authorJaroslav Kysela <perex@perex.cz>
Fri, 16 Oct 2015 14:36:06 +0000 (16:36 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 16 Oct 2015 14:36:06 +0000 (16:36 +0200)
src/access.c
src/channels.c
src/idnode.c
src/idnode.h
src/service_mapper.c

index caa39fc090e30a1610f849c374dce2f04f6672ed..b93529f96debd1445dce5a55d1a9c4768b5266fe 100644 (file)
@@ -1238,12 +1238,8 @@ access_entry_chtag_set_cb ( idnode_t *in1, idnode_t *in2, void *origin )
   access_entry_t *ae = (access_entry_t *)in1;
   idnode_list_mapping_t *ilm;
   channel_tag_t *ct = (channel_tag_t *)in2;
-  ilm = idnode_list_link(in1, &ae->ae_chtags, in2, &ct->ct_accesses, origin);
-  if (ilm) {
-    ilm->ilm_in1_save = 1;
-    return 1;
-  }
-  return 0;
+  ilm = idnode_list_link(in1, &ae->ae_chtags, in2, &ct->ct_accesses, origin, 1);
+  return ilm ? 1 : 0;
 }
 
 static int
@@ -1273,12 +1269,8 @@ access_entry_dvr_config_set_cb ( idnode_t *in1, idnode_t *in2, void *origin )
   access_entry_t *ae = (access_entry_t *)in1;
   idnode_list_mapping_t *ilm;
   dvr_config_t *dvr = (dvr_config_t *)in2;
-  ilm = idnode_list_link(in1, &ae->ae_dvr_configs, in2, &dvr->dvr_accesses, origin);
-  if (ilm) {
-    ilm->ilm_in1_save = 1;
-    return 1;
-  }
-  return 0;
+  ilm = idnode_list_link(in1, &ae->ae_dvr_configs, in2, &dvr->dvr_accesses, origin, 1);
+  return ilm ? 1 : 0;
 }
 
 static int
@@ -1308,12 +1300,8 @@ access_entry_profile_set_cb ( idnode_t *in1, idnode_t *in2, void *origin )
   access_entry_t *ae = (access_entry_t *)in1;
   idnode_list_mapping_t *ilm;
   profile_t *pro = (profile_t *)in2;
-  ilm = idnode_list_link(in1, &ae->ae_profiles, in2, &pro->pro_accesses, origin);
-  if (ilm) {
-    ilm->ilm_in1_save = 1;
-    return 1;
-  }
-  return 0;
+  ilm = idnode_list_link(in1, &ae->ae_profiles, in2, &pro->pro_accesses, origin, 1);
+  return ilm ? 1 : 0;
 }
 
 static int
index cb99263e262787b67ab106d0cdf688ed0e0903c0..8906d189dd2f0f9f14fc59a7c7617d845287ebb9 100644 (file)
@@ -934,9 +934,8 @@ channel_tag_map(channel_tag_t *ct, channel_t *ch, void *origin)
 
   ilm = idnode_list_link(&ct->ct_id, &ct->ct_ctms,
                          &ch->ch_id, &ch->ch_ctms,
-                         origin);
+                         origin, 2);
   if (ilm) {
-    ilm->ilm_in2_save = 1; /* channel */
     if(ct->ct_enabled && !ct->ct_internal) {
       htsp_tag_update(ct);
       htsp_channel_update(ch);
index 317cbfa0253240217f04765610580e99de871e1d..0d06542f95d5acfcc87876df941aa3d6ece74e5d 100644 (file)
@@ -1359,7 +1359,7 @@ idnode_list_notify ( idnode_list_mapping_t *ilm, void *origin )
 idnode_list_mapping_t *
 idnode_list_link ( idnode_t *in1, idnode_list_head_t *in1_list,
                    idnode_t *in2, idnode_list_head_t *in2_list,
-                   void *origin )
+                   void *origin, uint32_t savemask )
 {
   idnode_list_mapping_t *ilm;
 
@@ -1381,6 +1381,8 @@ idnode_list_link ( idnode_t *in1, idnode_list_head_t *in1_list,
   ilm->ilm_in2 = in2;
   LIST_INSERT_HEAD(in1_list, ilm, ilm_in1_link);
   LIST_INSERT_HEAD(in2_list, ilm, ilm_in2_link);
+  ilm->ilm_in1_save = savemask & 1;
+  ilm->ilm_in2_save = (savemask >> 1) & 1;
   idnode_list_notify(ilm, origin);
   return ilm;
 }
index ffeea511ed8c06e8bff3d4072417254cd29fe640..a639d642501e9ff46f2772e7ab3b15cba6dfe8ff 100644 (file)
@@ -223,7 +223,7 @@ static inline void idnode_perm_unset(idnode_t *self) { self->in_access = NULL; }
 idnode_list_mapping_t * idnode_list_link
                        ( idnode_t *in1, idnode_list_head_t *in1_list,
                          idnode_t *in2, idnode_list_head_t *in2_list,
-                         void *origin );
+                         void *origin, uint32_t savemask );
 void idnode_list_unlink ( idnode_list_mapping_t *ilm, void *origin );
 void idnode_list_destroy ( idnode_list_head_t *ilh, void *origin );
 htsmsg_t * idnode_list_get1 ( idnode_list_head_t *in1_list );
index fe1c48017dfc20365a4c3839c854a09d5575f4fb..5a22221ee56f7335793c0718c6b3407d3fb99338 100644 (file)
@@ -188,10 +188,9 @@ service_mapper_link ( service_t *s, channel_t *c, void *origin )
 
   ilm = idnode_list_link(&s->s_id, &s->s_channels,
                          &c->ch_id, &c->ch_services,
-                         origin);
+                         origin, 2);
   if (ilm) {
     service_mapped(s);
-    ilm->ilm_in2_save = 1; /* channel */
     return 1;
   }
   return 0;