Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mpegts tables: moved locking from inside to outside mux open/close
  • Loading branch information
perexg committed Aug 13, 2014
1 parent 767a75d commit fc1f960
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 22 deletions.
25 changes: 9 additions & 16 deletions src/input/mpegts/mpegts_mux.c
Expand Up @@ -709,29 +709,24 @@ mpegts_mux_open_table ( mpegts_mux_t *mm, mpegts_table_t *mt, int subscribe )
{
mpegts_input_t *mi;

pthread_mutex_lock(&mm->mm_tables_lock);
if (mt->mt_destroyed) {
pthread_mutex_unlock(&mm->mm_tables_lock);
lock_assert(&mm->mm_tables_lock);

if (mt->mt_destroyed)
return;
}
if (!mm->mm_active || !mm->mm_active->mmi_input) {
mt->mt_subscribed = 0;
LIST_INSERT_HEAD(&mm->mm_tables, mt, mt_link);
mm->mm_num_tables++;
pthread_mutex_unlock(&mm->mm_tables_lock);
return;
}
if (mt->mt_flags & MT_DEFER) {
if (mt->mt_defer_cmd == MT_DEFER_OPEN_PID) {
pthread_mutex_unlock(&mm->mm_tables_lock);
if (mt->mt_defer_cmd == MT_DEFER_OPEN_PID)
return;
}
mpegts_table_grab(mt); /* thread will release the table */
LIST_INSERT_HEAD(&mm->mm_tables, mt, mt_link);
mm->mm_num_tables++;
mt->mt_defer_cmd = MT_DEFER_OPEN_PID;
TAILQ_INSERT_TAIL(&mm->mm_defer_tables, mt, mt_defer_link);
pthread_mutex_unlock(&mm->mm_tables_lock);
return;
}
mi = mm->mm_active->mmi_input;
Expand All @@ -744,14 +739,16 @@ mpegts_mux_open_table ( mpegts_mux_t *mm, mpegts_table_t *mt, int subscribe )
mt->mt_subscribed = 1;
}
pthread_mutex_unlock(&mi->mi_output_lock);
pthread_mutex_lock(&mm->mm_tables_lock);
}

void
mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
{
mpegts_input_t *mi;

pthread_mutex_lock(&mm->mm_tables_lock);
lock_assert(&mm->mm_tables_lock);

if (!mm->mm_active || !mm->mm_active->mmi_input) {
if (mt->mt_defer_cmd) {
TAILQ_REMOVE(&mm->mm_defer_tables, mt, mt_defer_link);
Expand All @@ -760,27 +757,22 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
mt->mt_subscribed = 0;
LIST_REMOVE(mt, mt_link);
mm->mm_num_tables--;
pthread_mutex_unlock(&mm->mm_tables_lock);
return;
}
if (mt->mt_flags & MT_DEFER) {
if (mt->mt_defer_cmd == MT_DEFER_CLOSE_PID) {
pthread_mutex_unlock(&mm->mm_tables_lock);
if (mt->mt_defer_cmd == MT_DEFER_CLOSE_PID)
return;
}
LIST_REMOVE(mt, mt_link);
mm->mm_num_tables--;
if (mt->mt_defer_cmd == MT_DEFER_OPEN_PID) {
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);
return;
}
mpegts_table_grab(mt); /* thread will free the table */
mt->mt_defer_cmd = MT_DEFER_CLOSE_PID;
TAILQ_INSERT_TAIL(&mm->mm_defer_tables, mt, mt_defer_link);
pthread_mutex_unlock(&mm->mm_tables_lock);
return;
}
mi = mm->mm_active->mmi_input;
Expand All @@ -793,6 +785,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
mt->mt_subscribed = 0;
}
pthread_mutex_unlock(&mi->mi_output_lock);
pthread_mutex_lock(&mm->mm_tables_lock);
}

/* **************************************************************************
Expand Down
12 changes: 6 additions & 6 deletions src/input/mpegts/mpegts_table.c
Expand Up @@ -122,8 +122,12 @@ mpegts_table_release_ ( mpegts_table_t *mt )
void
mpegts_table_destroy ( mpegts_table_t *mt )
{
mpegts_mux_t *mm = mt->mt_mux;

pthread_mutex_lock(&mm->mm_tables_lock);
mt->mt_destroyed = 1;
mt->mt_mux->mm_close_table(mt->mt_mux, mt);
pthread_mutex_unlock(&mm->mm_tables_lock);
mpegts_table_release(mt);
}

Expand Down Expand Up @@ -173,17 +177,12 @@ mpegts_table_add
} else {
if (strcmp(mt->mt_name, name))
continue;
if (!(flags & MT_SKIPSUBS) && !mt->mt_subscribed) {
pthread_mutex_unlock(&mm->mm_tables_lock);
if (!(flags & MT_SKIPSUBS) && !mt->mt_subscribed)
mm->mm_open_table(mm, mt, 1);
return mt;
}
}
pthread_mutex_unlock(&mm->mm_tables_lock);
return mt;
}
pthread_mutex_unlock(&mm->mm_tables_lock);

tvhtrace("mpegts", "add %s table %02X/%02X (%d) pid %04X (%d)",
name, tableid, mask, tableid, pid, pid);

Expand All @@ -210,6 +209,7 @@ mpegts_table_add
subscribe = 0;
}
mm->mm_open_table(mm, mt, subscribe);
pthread_mutex_unlock(&mm->mm_tables_lock);
return mt;
}

Expand Down

0 comments on commit fc1f960

Please sign in to comment.