]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb_psi: improve check for dead muxes, fixes #2682
authorJaroslav Kysela <perex@perex.cz>
Mon, 16 Feb 2015 22:59:32 +0000 (23:59 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 16 Feb 2015 22:59:32 +0000 (23:59 +0100)
src/input/mpegts/dvb_psi.c

index 8e863a2f05fe87117bbbf0564de1d927f12fdd7a..d0b7955e222efb5913b07b0320e7477fc318a354 100644 (file)
@@ -117,6 +117,15 @@ dvb_servicetype_lookup ( int t )
   return -1;
 }
 
+static inline int
+mpegts_mux_alive(mpegts_mux_t *mm)
+{
+  /*
+   * Return, if mux seems to be alive for updating.
+   */
+  return !LIST_EMPTY(&mm->mm_services) && mm->mm_scan_result != MM_SCAN_FAIL;
+}
+
 static void
 dvb_bouquet_comment ( bouquet_t *bq, mpegts_mux_t *mm )
 {
@@ -1568,7 +1577,7 @@ dvb_nit_callback
     /* Find existing mux */
     LIST_FOREACH(mux, &mn->mn_muxes, mm_network_link)
       if (mux->mm_onid == onid && mux->mm_tsid == tsid &&
-          (mm == mux || !LIST_EMPTY(&mux->mm_services))) {
+          (mm == mux || mpegts_mux_alive(mux))) {
         r = dvb_nit_mux(mt, mux, mm, mn, onid, tsid, lptr, llen, tableid, bi, 0);
         if (r < 0)
           return r;
@@ -1761,7 +1770,7 @@ dvb_sdt_callback
   } else {
     LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link)
       if (mm->mm_onid == onid && mm->mm_tsid == tsid &&
-          (mm == mm_orig || !LIST_EMPTY(&mm->mm_services))) {
+          (mm == mm_orig || mpegts_mux_alive(mm))) {
         r = dvb_sdt_mux(mt, mm, mm_orig, ptr, len, tableid);
         if (r)
           return r;
@@ -1830,8 +1839,7 @@ atsc_vct_callback
 
     /* Find mux */
     LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link)
-      if (mm->mm_tsid == tsid &&
-          (mm == mm_orig || !LIST_EMPTY(&mm->mm_services))) {
+      if (mm->mm_tsid == tsid && (mm == mm_orig || mpegts_mux_alive(mm))) {
         /* Find the service */
         if (!(s = mpegts_service_find(mm, sid, 0, 1, &save)))
           continue;