return strcmp(((bouquet_t *)a)->bq_src ?: "", ((bouquet_t *)b)->bq_src ?: "");
}
+/**
+ *
+ */
+static void
+bouquet_free(bouquet_t *bq)
+{
+ bouquet_download_t *bqd;
+
+ idnode_save_check(&bq->bq_id, 1);
+ idnode_unlink(&bq->bq_id);
+
+ if ((bqd = bq->bq_download) != NULL) {
+ bouquet_download_stop(bqd);
+ download_done(&bqd->download);
+ free(bqd);
+ }
+
+ idnode_set_free(bq->bq_active_services);
+ idnode_set_free(bq->bq_services);
+ htsmsg_destroy(bq->bq_services_waiting);
+ free((char *)bq->bq_chtag_waiting);
+ free(bq->bq_name);
+ free(bq->bq_ext_url);
+ free(bq->bq_src);
+ free(bq->bq_comment);
+ free(bq);
+}
+
/**
*
*/
if (idnode_insert(&bq->bq_id, uuid, &bouquet_class, 0)) {
if (uuid)
tvherror("bouquet", "invalid uuid '%s'", uuid);
- free(bq);
+ bouquet_free(bq);
return NULL;
}
bq2 = RB_INSERT_SORTED(&bouquets, bq, bq_link, _bq_cmp);
if (bq2) {
tvherror("bouquet", "found duplicate source id: '%s', remove duplicate config", bq->bq_src);
- free(bq);
+ bouquet_free(bq);
return NULL;
}
static void
bouquet_destroy(bouquet_t *bq)
{
- bouquet_download_t *bqd;
-
if (!bq)
return;
RB_REMOVE(&bouquets, bq, bq_link);
- idnode_save_check(&bq->bq_id, 1);
- idnode_unlink(&bq->bq_id);
-
- if ((bqd = bq->bq_download) != NULL) {
- bouquet_download_stop(bqd);
- download_done(&bqd->download);
- free(bqd);
- }
- idnode_set_free(bq->bq_active_services);
- idnode_set_free(bq->bq_services);
- assert(bq->bq_services_waiting == NULL);
- free((char *)bq->bq_chtag_waiting);
- free(bq->bq_name);
- free(bq->bq_ext_url);
- free(bq->bq_src);
- free(bq->bq_comment);
- free(bq);
+ bouquet_free(bq);
}
/**