Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mpegts mux: the mm_pids flush must be protected by mi_output_lock
  • Loading branch information
perexg committed Oct 21, 2014
1 parent 33449e8 commit 43a7a07
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions src/input/mpegts/mpegts_mux.c
Expand Up @@ -713,19 +713,26 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force )
mpegts_input_flush_mux(mi, mm);

/* Ensure PIDs are cleared */
mm->mm_last_pid = -1;
mm->mm_last_mp = NULL;
while ((mp = RB_FIRST(&mm->mm_pids))) {
while ((mps = RB_FIRST(&mp->mp_subs))) {
RB_REMOVE(&mp->mp_subs, mps, mps_link);
free(mps);
}
RB_REMOVE(&mm->mm_pids, mp, mp_link);
if (mp->mp_fd != -1) {
tvhdebug("mpegts", "%s - close PID %04X (%d)", buf, mp->mp_pid, mp->mp_pid);
close(mp->mp_fd);
if (mi) {
pthread_mutex_lock(&mi->mi_output_lock);
mm->mm_last_pid = -1;
mm->mm_last_mp = NULL;
while ((mp = RB_FIRST(&mm->mm_pids))) {
assert(mi);
while ((mps = RB_FIRST(&mp->mp_subs))) {
RB_REMOVE(&mp->mp_subs, mps, mps_link);
free(mps);
}
RB_REMOVE(&mm->mm_pids, mp, mp_link);
if (mp->mp_fd != -1) {
tvhdebug("mpegts", "%s - close PID %04X (%d)", buf, mp->mp_pid, mp->mp_pid);
close(mp->mp_fd);
}
free(mp);
}
free(mp);
pthread_mutex_unlock(&mi->mi_output_lock);
} else {
assert(RB_FIRST(&mm->mm_pids) == NULL);
}

/* Scanning */
Expand Down

0 comments on commit 43a7a07

Please sign in to comment.