mpegts tables: protect more mt structure in open/close, fix memory leak (missing release), enhance traces
This commit is contained in:
parent
250666e40a
commit
e1d8c2a68c
2 changed files with 9 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
/* **************************************************************************
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue