]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts tables: protect more mt structure in open/close, fix memory leak (missing...
authorJaroslav Kysela <perex@perex.cz>
Tue, 21 Oct 2014 14:46:00 +0000 (16:46 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 21 Oct 2014 14:46:00 +0000 (16:46 +0200)
src/input/mpegts/mpegts_mux.c
src/input/mpegts/mpegts_table.c

index c8411005a4b4d9534bf1c64a65951b39ae4b1320..a8cc6f94c04d79ae8fb5a982fd5effb937283082 100644 (file)
@@ -776,6 +776,7 @@ mpegts_mux_open_table ( mpegts_mux_t *mm, mpegts_table_t *mt, int subscribe )
   mi = mm->mm_active->mmi_input;
   LIST_INSERT_HEAD(&mm->mm_tables, mt, mt_link);
   mm->mm_num_tables++;
+  mpegts_table_grab(mt);
   pthread_mutex_unlock(&mm->mm_tables_lock);
   pthread_mutex_lock(&mi->mi_output_lock);
   if (subscribe) {
@@ -784,6 +785,7 @@ mpegts_mux_open_table ( mpegts_mux_t *mm, mpegts_table_t *mt, int subscribe )
   }
   pthread_mutex_unlock(&mi->mi_output_lock);
   pthread_mutex_lock(&mm->mm_tables_lock);
+  mpegts_table_release(mt);
 }
 
 void
@@ -797,6 +799,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
     if (mt->mt_defer_cmd) {
       TAILQ_REMOVE(&mm->mm_defer_tables, mt, mt_defer_link);
       mt->mt_defer_cmd = 0;
+      mpegts_table_release(mt);
     }
     mt->mt_subscribed = 0;
     LIST_REMOVE(mt, mt_link);
@@ -822,6 +825,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
   mi = mm->mm_active->mmi_input;
   LIST_REMOVE(mt, mt_link);
   mm->mm_num_tables--;
+  mpegts_table_grab(mt);
   pthread_mutex_unlock(&mm->mm_tables_lock);
   pthread_mutex_lock(&mi->mi_output_lock);
   if (mt->mt_subscribed) {
@@ -830,6 +834,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
   }
   pthread_mutex_unlock(&mi->mi_output_lock);
   pthread_mutex_lock(&mm->mm_tables_lock);
+  mpegts_table_release(mt);
 }
 
 /* **************************************************************************
index 3b504edd4b394b501eb57dffbe62514be88d7688..db30032e1ec6805594ab384a41f159224a9390e0 100644 (file)
@@ -139,6 +139,9 @@ mpegts_table_release_ ( mpegts_table_t *mt )
     RB_REMOVE(&mt->mt_state, st, link);
     free(st);
   }
+  tvhtrace("mpegts", "table: free %s %02X/%02X (%d) pid %04X (%d)",
+           mt->mt_name, mt->mt_table, mt->mt_mask, mt->mt_table,
+           mt->mt_pid, mt->mt_pid);
   if (mt->mt_destroy)
     mt->mt_destroy(mt);
   free(mt->mt_name);
@@ -213,7 +216,7 @@ mpegts_table_add
     pthread_mutex_unlock(&mm->mm_tables_lock);
     return mt;
   }
-  tvhtrace("mpegts", "add %s table %02X/%02X (%d) pid %04X (%d)",
+  tvhtrace("mpegts", "table: %s add %02X/%02X (%d) pid %04X (%d)",
            name, tableid, mask, tableid, pid, pid);
 
   /* Create */