]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb: add mpegts_network_scan_mux_reactivate(), issue #4942
authorJaroslav Kysela <perex@perex.cz>
Mon, 19 Feb 2018 19:02:04 +0000 (20:02 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 19 Feb 2018 19:06:00 +0000 (20:06 +0100)
src/input/mpegts/mpegts_mux.c
src/input/mpegts/mpegts_network_scan.c
src/input/mpegts/mpegts_network_scan.h

index 03303246e3f897a6fa675a99bc704881c9a179c8..64e8f60e9347caff05f756696963245264cc5610 100644 (file)
@@ -1319,10 +1319,10 @@ mpegts_mux_set_tsid ( mpegts_mux_t *mm, uint16_t tsid, int force )
     return 0;
   if (!force && mm->mm_tsid != MPEGTS_TSID_NONE)
     return 0;
-  mm->mm_scan_state = MM_SCAN_STATE_ACTIVE;
   mm->mm_tsid = tsid;
   tvhtrace(LS_MPEGTS, "%s - set tsid %04X (%d)", mm->mm_nicename, tsid, tsid);
   idnode_changed(&mm->mm_id);
+  mpegts_network_scan_mux_reactivate(mm);
   return 1;
 }
 
index 61a5519a6500bd64937c72626022be8b9140a894..3bf2c82495a42b494ef63b4f3589a916566a62a4 100644 (file)
@@ -204,6 +204,20 @@ mpegts_network_scan_mux_active ( mpegts_mux_t *mm )
   TAILQ_INSERT_TAIL(&mn->mn_scan_active, mm, mm_scan_link);
 }
 
+/* Mux has been reactivated */
+void
+mpegts_network_scan_mux_reactivate ( mpegts_mux_t *mm )
+{
+  mpegts_network_t *mn = mm->mm_network;
+  if (mm->mm_scan_state == MM_SCAN_STATE_ACTIVE)
+    return;
+  if (mm->mm_scan_state == MM_SCAN_STATE_PEND)
+    TAILQ_REMOVE(&mn->mn_scan_pend, mm, mm_scan_link);
+  mm->mm_scan_init  = 0;
+  mm->mm_scan_state = MM_SCAN_STATE_ACTIVE;
+  TAILQ_INSERT_TAIL(&mn->mn_scan_active, mm, mm_scan_link);
+}
+
 /******************************************************************************
  * Mux queue handling
  *****************************************************************************/
index 748eee03b525a917f7c1576f97919b1af56fc723..5a8d9d46d6009c942cbba42d1946445df75f8b39 100644 (file)
@@ -45,6 +45,7 @@ void mpegts_network_scan_mux_done    ( mpegts_mux_t *mm );
 void mpegts_network_scan_mux_partial ( mpegts_mux_t *mm );
 void mpegts_network_scan_mux_cancel  ( mpegts_mux_t *mm, int reinsert );
 void mpegts_network_scan_mux_active  ( mpegts_mux_t *mm );
+void mpegts_network_scan_mux_reactivate ( mpegts_mux_t *mm );
 
 /*
  * Init / Teardown