]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: fix linked inputs (abort), fixes #2791
authorJaroslav Kysela <perex@perex.cz>
Thu, 23 Apr 2015 18:47:40 +0000 (20:47 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 23 Apr 2015 18:47:40 +0000 (20:47 +0200)
src/input/mpegts/mpegts_input.c
src/input/mpegts/mpegts_mux.c
src/input/mpegts/mpegts_mux_sched.c
src/subscriptions.h

index f9c040db19db8d03bdbf0603b205cec003cd00a5..072d5f0fa00786c6ec74b491619c591c8709b849 100644 (file)
@@ -582,6 +582,8 @@ mpegts_input_open_service ( mpegts_input_t *mi, mpegts_service_t *s, int flags,
       }
     } else if (flags & SUBSCRIPTION_TABLES) {
       mi->mi_open_pid(mi, s->s_dvb_mux, MPEGTS_TABLES_PID, MPS_RAW | MPS_TABLES, s);
+    } else if (flags & SUBSCRIPTION_MINIMAL) {
+      mi->mi_open_pid(mi, s->s_dvb_mux, DVB_PAT_PID, MPS_RAW, s);
     }
   }
 
index 1f9c6670c9e7ef32251b7ca71d8de769fd09fa20..04962724602e8978a6719f608eba67fa9889da18 100644 (file)
@@ -134,7 +134,8 @@ mpegts_mux_subscribe_keep
 
   s = mi->mi_linked;
   mi->mi_linked = NULL;
-  r = mpegts_mux_subscribe(mm, mi, "keep", SUBSCRIPTION_PRIO_KEEP, SUBSCRIPTION_NONE);
+  r = mpegts_mux_subscribe(mm, mi, "keep", SUBSCRIPTION_PRIO_KEEP,
+                           SUBSCRIPTION_RESTART | SUBSCRIPTION_MINIMAL);
   mi->mi_linked = s;
   return r;
 }
@@ -203,6 +204,7 @@ mpegts_mux_unsubscribe_linked
   mpegts_mux_instance_t *mmi;
 
   if (mi) {
+    tvhtrace("mpegts", "unsubscribing linked from '%s'", mi->mi_name);
     LIST_FOREACH(mmi, &mi->mi_mux_active, mmi_active_link)
       mpegts_mux_unsubscribe_by_name(mmi->mmi_mux, "keep");
   }
@@ -721,6 +723,9 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force, int reason )
     }
   }
 
+  if (mm->mm_active != mmi)
+    return;
+
   mi->mi_stopping_mux(mi, mmi);
   mi->mi_stop_mux(mi, mmi);
   mi->mi_stopped_mux(mi, mmi);
index 9e35ba86ea5b6aad1554589f043d4872ff8f6a60..287d46c0ae5caaa06c2cf15b1a4457226d977267 100644 (file)
@@ -213,7 +213,7 @@ mpegts_mux_sched_timer ( void *p )
     mms->mms_sub
       = subscription_create_from_mux(mms->mms_prch, NULL, mms->mms_weight,
                                      mms->mms_creator ?: "",
-                                     SUBSCRIPTION_NONE,
+                                     SUBSCRIPTION_MINIMAL,
                                      NULL, NULL, NULL, NULL);
 
     /* Failed (try-again soon) */
index ed50453d458075430cbc474e015dc5a24aa3324a..c2ad74dca1a80f26eafd0ae02602eccdaa328a7e 100644 (file)
@@ -37,6 +37,7 @@ extern struct th_subscription_list subscriptions;
 #define SUBSCRIPTION_IDLESCAN   0x200 ///< for mux subscriptions
 #define SUBSCRIPTION_USERSCAN   0x400 ///< for mux subscriptions
 #define SUBSCRIPTION_EPG        0x800 ///< for mux subscriptions
+#define SUBSCRIPTION_MINIMAL   0x1000
 
 /* Some internal priorities */
 #define SUBSCRIPTION_PRIO_KEEP        1 ///< Keep input rolling