From: Jaroslav Kysela Date: Thu, 10 Mar 2016 19:01:27 +0000 (+0100) Subject: capmt: deallocate properly adapters (clang sanitizer) X-Git-Tag: v4.2.1~889 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5df696bdc0b20f2e5c7219dbf76db5548455f36;p=thirdparty%2Ftvheadend.git capmt: deallocate properly adapters (clang sanitizer) --- diff --git a/src/descrambler/capmt.c b/src/descrambler/capmt.c index 2d1466daf..cdb693d81 100644 --- a/src/descrambler/capmt.c +++ b/src/descrambler/capmt.c @@ -813,7 +813,7 @@ capmt_send_stop_descrambling(capmt_t *capmt) static void capmt_service_destroy(th_descrambler_t *td) { - capmt_service_t *ct = (capmt_service_t *)td; + capmt_service_t *ct = (capmt_service_t *)td, *ct2; mpegts_service_t *s = (mpegts_service_t *)ct->td_service; int oscam_new = capmt_oscam_new(ct->ct_capmt); capmt_caid_ecm_t *cce; @@ -843,12 +843,17 @@ capmt_service_destroy(th_descrambler_t *td) if (oscam_new) capmt_enumerate_services(capmt, 1); - if (LIST_EMPTY(&capmt->capmt_services)) { + LIST_FOREACH(ct2, &capmt->capmt_services, ct_link) + if (ct2->ct_adapter == ct->ct_adapter) + break; + if (ct2 == NULL) { capmt_pid_flush_adapter(capmt, ct->ct_adapter); capmt->capmt_adapters[ct->ct_adapter].ca_tuner = NULL; - memset(&capmt->capmt_demuxes, 0, sizeof(capmt->capmt_demuxes)); } + if (LIST_EMPTY(&capmt->capmt_services)) + memset(&capmt->capmt_demuxes, 0, sizeof(capmt->capmt_demuxes)); + pthread_mutex_unlock(&capmt->capmt_mutex); free(ct->td_nicename);