]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
capmt: deallocate properly adapters (clang sanitizer)
authorJaroslav Kysela <perex@perex.cz>
Thu, 10 Mar 2016 19:01:27 +0000 (20:01 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 10 Mar 2016 19:01:27 +0000 (20:01 +0100)
src/descrambler/capmt.c

index 2d1466dafe996b28f62d47f11b9d0ec807a8c4d4..cdb693d8145c353315c2e97638ac355a9f06365b 100644 (file)
@@ -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);