]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts network_scan: fix for failed tuning
authorAdam Sutton <dev@adamsutton.me.uk>
Thu, 5 Jun 2014 18:07:22 +0000 (19:07 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Mon, 9 Jun 2014 21:08:40 +0000 (22:08 +0100)
src/input/mpegts/mpegts_network_scan.c

index bbb48b54ecfebfb535d30f6eb766bacbf2506a13..018041b750959679325cdec304268d2fd7be827a 100644 (file)
@@ -63,18 +63,18 @@ mpegts_network_scan_timer_cb ( void *p )
     if (mm == mark) break;
 
     /* Attempt to tune */
-    // TODO: change reason?
     r = mpegts_mux_subscribe(mm, "scan", mm->mm_scan_weight);
 
-    /* Stop (no free tuners) */
-    if (r == SM_CODE_NO_FREE_ADAPTER)
-      break;
-
     /* Started */
     if (!r) {
       assert(mm->mm_scan_state == MM_SCAN_STATE_ACTIVE);
       continue;
     }
+    assert(mm->mm_scan_state == MM_SCAN_STATE_PEND);
+
+    /* Stop (no free tuners) */
+    if (r == SM_CODE_NO_FREE_ADAPTER)
+      break;
 
     /* Available tuners can't be used
      * Note: this is subtly different it does not imply there are no free
@@ -84,12 +84,15 @@ mpegts_network_scan_timer_cb ( void *p )
      */
     if (r == SM_CODE_NO_VALID_ADAPTER) {
       if (!mark) mark = mm;
+      TAILQ_REMOVE(&mpegts_network_scan_pend, mm, mm_scan_link);
       TAILQ_INSERT_SORTED(&mpegts_network_scan_pend, mm, mm_scan_link, mm_cmp);
       continue;
     }
 
     /* Failed */
-    mpegts_network_scan_mux_fail(mm);
+    TAILQ_REMOVE(&mpegts_network_scan_pend, mm, mm_scan_link);
+    mm->mm_scan_ok    = 0;
+    mm->mm_scan_state = MM_SCAN_STATE_IDLE;
   }
 
   /* Re-arm (backstop, most things will auto-rearm at point of next event