From: Jaroslav Kysela Date: Thu, 10 Mar 2016 18:10:26 +0000 (+0100) Subject: subscriptions: improve s_descramble_info locking (clang sanitizer) X-Git-Tag: v4.2.1~890 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=145ad1f3be25263baf54730e3fc1eca6c6714f2c;p=thirdparty%2Ftvheadend.git subscriptions: improve s_descramble_info locking (clang sanitizer) --- diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index f7f316055..699c30043 100644 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -335,10 +335,14 @@ static void descrambler_notify_deliver( mpegts_service_t *t, descramble_info_t *di, int locked ) { streaming_message_t *sm; + int r; + pthread_mutex_lock(&t->s_stream_mutex); if (!t->s_descramble_info) t->s_descramble_info = calloc(1, sizeof(*di)); - if (memcmp(t->s_descramble_info, di, sizeof(*di)) == 0) { + r = memcmp(t->s_descramble_info, di, sizeof(*di)); + pthread_mutex_unlock(&t->s_stream_mutex); + if (r == 0) { /* identical */ free(di); return; } diff --git a/src/subscriptions.c b/src/subscriptions.c index c369ec51e..c47382eba 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -893,6 +893,7 @@ subscription_create_msg(th_subscription_t *s, const char *lang) { htsmsg_t *m = htsmsg_create_map(); descramble_info_t *di; + service_t *t; profile_t *pro; char buf[256]; @@ -936,9 +937,10 @@ subscription_create_msg(th_subscription_t *s, const char *lang) if(s->ths_channel != NULL) htsmsg_add_str(m, "channel", channel_get_name(s->ths_channel)); - if(s->ths_service != NULL) { - htsmsg_add_str(m, "service", s->ths_service->s_nicename ?: ""); + if((t = s->ths_service) != NULL) { + htsmsg_add_str(m, "service", t->s_nicename ?: ""); + pthread_mutex_lock(&t->s_stream_mutex); if ((di = s->ths_service->s_descramble_info) != NULL) { if (di->caid == 0 && di->ecmtime == 0) { snprintf(buf, sizeof(buf), N_("Failed")); @@ -949,6 +951,7 @@ subscription_create_msg(th_subscription_t *s, const char *lang) } htsmsg_add_str(m, "descramble", buf); } + pthread_mutex_unlock(&t->s_stream_mutex); if (s->ths_prch != NULL) { pro = s->ths_prch->prch_pro;