From 79846a46b111db8b08f75d7ee95bcc52ba600386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Thu, 10 Dec 2009 23:20:06 +0000 Subject: [PATCH] Don't fail so hard in subscription_create_from_transport() if the adapter cannot be started --- src/rtsp.c | 7 ++++--- src/serviceprobe.c | 7 +++++++ src/subscriptions.c | 11 +++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/rtsp.c b/src/rtsp.c index faa2deaa..85a767fd 100644 --- a/src/rtsp.c +++ b/src/rtsp.c @@ -483,7 +483,7 @@ rtsp_streaming_input(void *opaque, streaming_message_t *sm) /** * */ -static void +static int rtsp_subscribe(rtsp_t *rtsp, rtsp_resource_t *rr) { th_subscription_t *s = NULL; @@ -493,11 +493,11 @@ rtsp_subscribe(rtsp_t *rtsp, rtsp_resource_t *rr) switch(rr->rr_type) { case RTSP_RESOURCE_CHANNEL: if(rtsp->rtsp_sub->ths_channel == rr->rr_channel) - return; + return 0; break; case RTSP_RESOURCE_SERVICE: if(rtsp->rtsp_sub->ths_transport == rr->rr_service) - return; + return 0; } subscription_unsubscribe(rtsp->rtsp_sub); } @@ -521,6 +521,7 @@ rtsp_subscribe(rtsp_t *rtsp, rtsp_resource_t *rr) } rtsp->rtsp_sub = s; + return s == NULL; } diff --git a/src/serviceprobe.c b/src/serviceprobe.c index ec5e6fd2..8d079382 100644 --- a/src/serviceprobe.c +++ b/src/serviceprobe.c @@ -113,6 +113,13 @@ serviceprobe_thread(void *aux) t->tht_svcname); s = subscription_create_from_transport(t, "serviceprobe", &sq.sq_st, 0); + if(s == NULL) { + t->tht_sp_onqueue = 0; + TAILQ_REMOVE(&serviceprobe_queue, t, tht_sp_link); + tvhlog(LOG_INFO, "serviceprobe", "%20s: could not subscribe", + t->tht_svcname); + continue; + } transport_ref(t); pthread_mutex_unlock(&global_lock); diff --git a/src/subscriptions.c b/src/subscriptions.c index e1261013..2a06a147 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -287,8 +287,15 @@ subscription_create_from_transport(th_transport_t *t, const char *name, th_subscription_t *s = subscription_create(INT32_MAX, name, st, flags); source_info_t si; - if(t->tht_status != TRANSPORT_RUNNING) - transport_start(t, INT32_MAX, 1); + if(t->tht_status != TRANSPORT_RUNNING) { + if(transport_start(t, INT32_MAX, 1)) { + subscription_unsubscribe(s); + + tvhlog(LOG_INFO, "subscription", + "\"%s\" direct subscription failed"); + return NULL; + } + } t->tht_setsourceinfo(t, &si);