mpegts tables: move defer tables from list to tailq
The execution order must be same as queued.
This commit is contained in:
parent
0a8c66772b
commit
47a1cbccaf
4 changed files with 11 additions and 10 deletions
|
@ -165,7 +165,7 @@ struct mpegts_table
|
|||
*/
|
||||
|
||||
LIST_ENTRY(mpegts_table) mt_link;
|
||||
LIST_ENTRY(mpegts_table) mt_defer_link;
|
||||
TAILQ_ENTRY(mpegts_table) mt_defer_link;
|
||||
mpegts_mux_t *mt_mux;
|
||||
|
||||
char *mt_name;
|
||||
|
@ -378,7 +378,7 @@ struct mpegts_mux
|
|||
|
||||
int mm_num_tables;
|
||||
LIST_HEAD(, mpegts_table) mm_tables;
|
||||
LIST_HEAD(, mpegts_table) mm_defer_tables;
|
||||
TAILQ_HEAD(, mpegts_table) mm_defer_tables;
|
||||
pthread_mutex_t mm_tables_lock;
|
||||
TAILQ_HEAD(, mpegts_table) mm_table_queue;
|
||||
|
||||
|
|
|
@ -594,8 +594,8 @@ mpegts_input_table_waiting ( mpegts_input_t *mi, mpegts_mux_t *mm )
|
|||
mpegts_table_t *mt;
|
||||
|
||||
pthread_mutex_lock(&mm->mm_tables_lock);
|
||||
while ((mt = LIST_FIRST(&mm->mm_defer_tables)) != NULL) {
|
||||
LIST_REMOVE(mt, mt_defer_link);
|
||||
while ((mt = TAILQ_FIRST(&mm->mm_defer_tables)) != NULL) {
|
||||
TAILQ_REMOVE(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
if (mt->mt_defer_cmd == MT_DEFER_OPEN_PID && !mt->mt_destroyed) {
|
||||
mt->mt_defer_cmd = 0;
|
||||
if (!mt->mt_subscribed) {
|
||||
|
|
|
@ -730,7 +730,7 @@ mpegts_mux_open_table ( mpegts_mux_t *mm, mpegts_table_t *mt, int subscribe )
|
|||
LIST_INSERT_HEAD(&mm->mm_tables, mt, mt_link);
|
||||
mm->mm_num_tables++;
|
||||
mt->mt_defer_cmd = MT_DEFER_OPEN_PID;
|
||||
LIST_INSERT_HEAD(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
TAILQ_INSERT_TAIL(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
pthread_mutex_unlock(&mm->mm_tables_lock);
|
||||
return;
|
||||
}
|
||||
|
@ -754,7 +754,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
|
|||
pthread_mutex_lock(&mm->mm_tables_lock);
|
||||
if (!mm->mm_active || !mm->mm_active->mmi_input) {
|
||||
if (mt->mt_defer_cmd) {
|
||||
LIST_REMOVE(mt, mt_defer_link);
|
||||
TAILQ_REMOVE(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
mt->mt_defer_cmd = 0;
|
||||
}
|
||||
mt->mt_subscribed = 0;
|
||||
|
@ -771,7 +771,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
|
|||
LIST_REMOVE(mt, mt_link);
|
||||
mm->mm_num_tables--;
|
||||
if (mt->mt_defer_cmd == MT_DEFER_OPEN_PID) {
|
||||
LIST_REMOVE(mt, mt_defer_link);
|
||||
TAILQ_REMOVE(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
mt->mt_defer_cmd = 0;
|
||||
pthread_mutex_unlock(&mm->mm_tables_lock);
|
||||
mpegts_table_release(mt);
|
||||
|
@ -779,7 +779,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
|
|||
}
|
||||
mpegts_table_grab(mt); /* thread will free the table */
|
||||
mt->mt_defer_cmd = MT_DEFER_CLOSE_PID;
|
||||
LIST_INSERT_HEAD(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
TAILQ_INSERT_TAIL(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
pthread_mutex_unlock(&mm->mm_tables_lock);
|
||||
return;
|
||||
}
|
||||
|
@ -922,6 +922,7 @@ mpegts_mux_create0
|
|||
mm->mm_close_table = mpegts_mux_close_table;
|
||||
pthread_mutex_init(&mm->mm_tables_lock, NULL);
|
||||
TAILQ_INIT(&mm->mm_table_queue);
|
||||
TAILQ_INIT(&mm->mm_defer_tables);
|
||||
LIST_INIT(&mm->mm_descrambler_caids);
|
||||
TAILQ_INIT(&mm->mm_descrambler_tables);
|
||||
TAILQ_INIT(&mm->mm_descrambler_emms);
|
||||
|
|
|
@ -225,8 +225,8 @@ mpegts_table_flush_all ( mpegts_mux_t *mm )
|
|||
descrambler_flush_tables(mm);
|
||||
mi = mm->mm_active ? mm->mm_active->mmi_input : NULL;
|
||||
pthread_mutex_lock(&mm->mm_tables_lock);
|
||||
while ((mt = LIST_FIRST(&mm->mm_defer_tables))) {
|
||||
LIST_REMOVE(mt, mt_defer_link);
|
||||
while ((mt = TAILQ_FIRST(&mm->mm_defer_tables))) {
|
||||
TAILQ_REMOVE(&mm->mm_defer_tables, mt, mt_defer_link);
|
||||
if (mt->mt_defer_cmd == MT_DEFER_CLOSE_PID) {
|
||||
if (mi) {
|
||||
pthread_mutex_unlock(&mm->mm_tables_lock);
|
||||
|
|
Loading…
Add table
Reference in a new issue