diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index c8411005..a8cc6f94 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -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); } /* ************************************************************************** diff --git a/src/input/mpegts/mpegts_table.c b/src/input/mpegts/mpegts_table.c index 3b504edd..db30032e 100644 --- a/src/input/mpegts/mpegts_table.c +++ b/src/input/mpegts/mpegts_table.c @@ -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 */