]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts input: mm_active cleanups, fix also memory leak introduced by mi_stop
authorJaroslav Kysela <perex@perex.cz>
Tue, 28 Oct 2014 20:02:39 +0000 (21:02 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 28 Oct 2014 20:02:39 +0000 (21:02 +0100)
src/input/mpegts/mpegts_input.c
src/input/mpegts/mpegts_mux.c

index 56e423a4a7936cf4a23a4593a4fbfd2d79760cd2..6c2483c138142b92d3b92cc5fe9ba9802ac2a130 100644 (file)
@@ -605,6 +605,8 @@ mpegts_input_recv_packets
     if (!mi->mi_stop) {
       TAILQ_INSERT_TAIL(&mi->mi_input_queue, mp, mp_link);
       pthread_cond_signal(&mi->mi_input_cond);
+    } else {
+      free(mp);
     }
     pthread_mutex_unlock(&mi->mi_input_lock);
   }
@@ -718,6 +720,8 @@ mpegts_input_process
   mpegts_mux_instance_t *mmi = mm->mm_active;
   mpegts_pid_t *last_mp = NULL;
 
+  assert(mmi);
+
   mi->mi_live = 1;
 
   /* Process */
index 3c43f0bfd677064c47c9b95524147dec08c42320..9c9aa054cf3644ee74339fe1cdb97b0b6598e354 100644 (file)
@@ -692,9 +692,6 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force )
   /* Stop possible recursion */
   if (!mmi) return;
 
-  /* Clear */
-  mm->mm_active = NULL;
-
   mpegts_mux_nice_name(mm, buf, sizeof(buf));
   tvhdebug("mpegts", "%s - stopping mux", buf);
 
@@ -706,6 +703,8 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force )
   mi->mi_stop_mux(mi, mmi);
   mi->mi_stopped_mux(mi, mmi);
 
+  assert(mm->mm_active == NULL);
+
   /* Flush all tables */
   tvhtrace("mpegts", "%s - flush tables", buf);
   mpegts_table_flush_all(mm);