From 689076d3060b992cddef2e302c024fc92200a8a9 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 24 Jan 2018 09:19:32 +0100 Subject: [PATCH] cccam: unset the busy flag when all services are deassigned --- src/descrambler/cccam.c | 10 ++++++++++ src/descrambler/cclient.c | 9 ++++++--- src/descrambler/cclient.h | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/descrambler/cccam.c b/src/descrambler/cccam.c index 9eb025125..52fc3d274 100644 --- a/src/descrambler/cccam.c +++ b/src/descrambler/cccam.c @@ -872,6 +872,15 @@ cccam_read(void *cc, sbuf_t *rbuf) return 0; } +/** + * + */ +static void +cccam_no_services(void *cc) +{ + cccam_unset_busy((cccam_t *)cc); +} + /** * */ @@ -1051,5 +1060,6 @@ caclient_t *cccam_create(void) cccam->cc_send_ecm = cccam_send_ecm; cccam->cc_send_emm = cccam_send_emm; cccam->cc_keepalive = cccam_send_ka; + cccam->cc_no_services = cccam_no_services; return (caclient_t *)cccam; } diff --git a/src/descrambler/cclient.c b/src/descrambler/cclient.c index 901589397..1738504c2 100644 --- a/src/descrambler/cclient.c +++ b/src/descrambler/cclient.c @@ -995,7 +995,7 @@ end: * cc_mutex is held */ static void -cc_service_destroy0(th_descrambler_t *td) +cc_service_destroy0(cclient_t *cc, th_descrambler_t *td) { cc_service_t *ct = (cc_service_t *)td; int i; @@ -1012,6 +1012,9 @@ cc_service_destroy0(th_descrambler_t *td) free(ct->td_nicename); free(ct); + + if (LIST_EMPTY(&cc->cc_services) && cc->cc_no_services) + cc->cc_no_services(cc); } /** @@ -1024,7 +1027,7 @@ cc_service_destroy(th_descrambler_t *td) cclient_t *cc = ct->cs_client; pthread_mutex_lock(&cc->cc_mutex); - cc_service_destroy0(td); + cc_service_destroy0(cc, td); pthread_mutex_unlock(&cc->cc_mutex); } @@ -1075,7 +1078,7 @@ cc_service_start(caclient_t *cac, service_t *t) if (st) break; } if (!pcard) { - if (ct) cc_service_destroy0((th_descrambler_t*)ct); + if (ct) cc_service_destroy0(cc, (th_descrambler_t*)ct); goto end; } if (ct) { diff --git a/src/descrambler/cclient.h b/src/descrambler/cclient.h index acecd679f..c9d913c44 100644 --- a/src/descrambler/cclient.h +++ b/src/descrambler/cclient.h @@ -146,6 +146,7 @@ typedef struct cclient { cc_card_data_t *pcard, const uint8_t *data, int len); void (*cc_send_emm)(void *cc, cc_service_t *ct, cc_card_data_t *pcard, uint32_t provid, const uint8_t *data, int len); + void (*cc_no_services)(void *cc); /* Connection */ int cc_fd; -- 2.47.3