void mpegts_mux_instance_delete ( tvh_input_instance_t *tii );
int mpegts_mux_instance_start
- ( mpegts_mux_instance_t **mmiptr );
+ ( mpegts_mux_instance_t **mmiptr, service_t *t );
int mpegts_mux_instance_weight ( mpegts_mux_instance_t *mmi );
const char *name, int weight, int flags);
void mpegts_mux_unsubscribe_by_name(mpegts_mux_t *mm, const char *name);
-void mpegts_mux_unsubscribe_linked(mpegts_input_t *mi);
+void mpegts_mux_unsubscribe_linked(mpegts_input_t *mi, service_t *t);
void mpegts_mux_scan_done ( mpegts_mux_t *mm, const char *buf, int res );
if (mi2) {
free(mi2->mi_linked);
mi2->mi_linked = NULL;
- mpegts_mux_unsubscribe_linked(mi2);
+ mpegts_mux_unsubscribe_linked(mi2, NULL);
}
- mpegts_mux_unsubscribe_linked(mi);
+ mpegts_mux_unsubscribe_linked(mi, NULL);
if (val && ((char *)val)[0]) {
mi->mi_linked = strdup((char *)val);
mi2 = mpegts_input_find((char *)val);
void
mpegts_mux_unsubscribe_linked
- ( mpegts_input_t *mi )
+ ( mpegts_input_t *mi, service_t *t )
{
th_subscription_t *ths, *ths_next;
for (ths = LIST_FIRST(&subscriptions); ths; ths = ths_next) {
ths_next = LIST_NEXT(ths, ths_global_link);
- if (ths->ths_source == (tvh_input_t *)mi && !strcmp(ths->ths_title, "keep"))
+ if (ths->ths_source == (tvh_input_t *)mi && !strcmp(ths->ths_title, "keep") &&
+ ths->ths_service != t)
subscription_unsubscribe(ths, 0);
}
}
int
mpegts_mux_instance_start
- ( mpegts_mux_instance_t **mmiptr )
+ ( mpegts_mux_instance_t **mmiptr, service_t *t )
{
int r;
char buf[256], buf2[256];
tvhinfo("mpegts", "%s - tuning on %s", buf, buf2);
if (mi->mi_linked)
- mpegts_mux_unsubscribe_linked(mi);
+ mpegts_mux_unsubscribe_linked(mi, t);
r = mi->mi_warm_mux(mi, mmi);
if (r) return r;
if (mmi2 && !mpegts_mux_has_subscribers(mmi2->mmi_mux, buf2)) {
s = mi2->mi_linked;
mi2->mi_linked = NULL;
- mpegts_mux_unsubscribe_linked(mi2);
+ mpegts_mux_unsubscribe_linked(mi2, NULL);
mi2->mi_linked = s;
} else {
if (!force) {