]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb psi: remove mpegts_psi_table_state_skel (atomicity problem)
authorJaroslav Kysela <perex@perex.cz>
Tue, 30 Jan 2018 18:19:36 +0000 (19:19 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 30 Jan 2018 18:28:19 +0000 (19:28 +0100)
src/input/mpegts/dvb_psi_lib.c
src/input/mpegts/dvb_support.c

index e342daf6db763c4c02d33abc4c7d6994a9fb601a..b22ae8a991da4b81465ea239906211e5f6c386b9 100644 (file)
@@ -21,8 +21,6 @@
 #include "input.h"
 #include "dvb.h"
 
-SKEL_DECLARE(mpegts_psi_table_state_skel, struct mpegts_psi_table_state);
-
 /* **************************************************************************
  * Lookup tables
  * *************************************************************************/
@@ -214,19 +212,21 @@ static mpegts_psi_table_state_t *
 mpegts_table_state_find
   ( mpegts_psi_table_t *mt, int tableid, uint64_t extraid, int last )
 {
-  mpegts_psi_table_state_t *st;
+  mpegts_psi_table_state_t *st, *st2, st_cmp;
 
   /* Find state */
-  SKEL_ALLOC(mpegts_psi_table_state_skel);
-  mpegts_psi_table_state_skel->tableid = tableid;
-  mpegts_psi_table_state_skel->extraid = extraid;
-  st = RB_INSERT_SORTED(&mt->mt_state, mpegts_psi_table_state_skel, link, sect_cmp);
-  if (!st) {
-    st   = mpegts_psi_table_state_skel;
-    SKEL_USED(mpegts_psi_table_state_skel);
-    mt->mt_incomplete++;
-    mpegts_table_state_reset(mt, st, last);
-  }
+  st_cmp.tableid = tableid;
+  st_cmp.extraid = extraid;
+  st = RB_FIND(&mt->mt_state, &st_cmp, link, sect_cmp);
+  if (st)
+    return st;
+  st = calloc(1, sizeof(*st));
+  st->tableid = tableid;
+  st->extraid = extraid;
+  st2 = RB_INSERT_SORTED(&mt->mt_state, st, link, sect_cmp);
+  assert(st2 == NULL);
+  mt->mt_incomplete++;
+  mpegts_table_state_reset(mt, st, last);
   return st;
 }
 
index fc11a24118b84bbdeee05b6a82d9b2f9fd8baad4..69ff0d87541bfd85eeb31bda8372a3c33a33bd56 100644 (file)
@@ -1184,9 +1184,6 @@ void dvb_init( void )
 
 void dvb_done( void )
 {
-  extern SKEL_DECLARE(mpegts_psi_table_state_skel, mpegts_psi_table_state_t);
-
-  SKEL_FREE(mpegts_psi_table_state_skel);
 #if ENABLE_MPEGTS_DVB
   htsmsg_destroy(satellites);
 #endif