static void free_attributes(struct sdp_attributes *a) { /* g_hash_table_destroy(a->name_hash); */ g_hash_table_destroy(a->id_hash); /* g_hash_table_destroy(a->name_lists_hash); */ g_hash_table_destroy(a->id_lists_hash); g_queue_clear_full(&a->list, attr_free); }
static void __send_timer_free(void *p) { struct send_timer *st = p; ilog(LOG_DEBUG, "freeing send_timer"); g_queue_clear_full(&st->packets, codec_packet_free); mutex_destroy(&st->lock); obj_put(st->call); }
static void sp_free(void *p) { struct stream_params *s = p; if (s->crypto.mki) free(s->crypto.mki); g_queue_clear_full(&s->rtp_payload_types, rtp_pt_free); ice_candidates_free(&s->ice_candidates); g_slice_free1(sizeof(*s), s); }
static void ice_candidate_pairs_free(GQueue *q) { g_queue_clear_full(q, ice_candidate_pair_free); }
void ice_candidates_free(GQueue *q) { g_queue_clear_full(q, ice_candidate_free); }
void sdp_free(GQueue *sessions) { g_queue_clear_full(sessions, session_free); }
static void session_free(void *p) { struct sdp_session *session = p; g_queue_clear_full(&session->media_streams, media_free); free_attributes(&session->attributes); g_slice_free1(sizeof(*session), session); }
static void media_free(void *p) { struct sdp_media *media = p; free_attributes(&media->attributes); g_queue_clear_full(&media->format_list, str_slice_free); g_slice_free1(sizeof(*media), media); }
static void streams_free(GQueue *q) { g_queue_clear_full(q, sp_free); }