From 47a1cbccaf2aeb58d5133dc0f43cc0960ba3730d Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 8 Aug 2014 18:26:45 +0200 Subject: [PATCH] mpegts tables: move defer tables from list to tailq The execution order must be same as queued. --- src/input/mpegts.h | 4 ++-- src/input/mpegts/mpegts_input.c | 4 ++-- src/input/mpegts/mpegts_mux.c | 9 +++++---- src/input/mpegts/mpegts_table.c | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 791e56be..f72ac82e 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -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; diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 9c131de6..afb6a5a0 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -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) { diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index 474ff78b..b53813bc 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -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); diff --git a/src/input/mpegts/mpegts_table.c b/src/input/mpegts/mpegts_table.c index e9e73a5b..674cc276 100644 --- a/src/input/mpegts/mpegts_table.c +++ b/src/input/mpegts/mpegts_table.c @@ -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);