|
|
|
|
@ -3688,6 +3688,23 @@ void call_subscription_free(void *p) {
|
|
|
|
|
g_slice_free1(sizeof(struct call_subscription), p);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void __monologue_free(struct call_monologue *m) {
|
|
|
|
|
g_ptr_array_free(m->medias, true);
|
|
|
|
|
g_hash_table_destroy(m->associated_tags);
|
|
|
|
|
g_hash_table_destroy(m->media_ids);
|
|
|
|
|
free_ssrc_hash(&m->ssrc_hash);
|
|
|
|
|
if (m->last_out_sdp)
|
|
|
|
|
g_string_free(m->last_out_sdp, TRUE);
|
|
|
|
|
str_free_dup(&m->last_in_sdp);
|
|
|
|
|
sdp_free(&m->last_in_sdp_parsed);
|
|
|
|
|
sdp_streams_free(&m->last_in_sdp_streams);
|
|
|
|
|
g_hash_table_destroy(m->subscribers_ht);
|
|
|
|
|
g_hash_table_destroy(m->subscriptions_ht);
|
|
|
|
|
g_queue_clear_full(&m->subscribers, call_subscription_free);
|
|
|
|
|
g_queue_clear_full(&m->subscriptions, call_subscription_free);
|
|
|
|
|
g_slice_free1(sizeof(*m), m);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void __call_free(void *p) {
|
|
|
|
|
struct call *c = p;
|
|
|
|
|
struct call_monologue *m;
|
|
|
|
|
@ -3703,21 +3720,7 @@ static void __call_free(void *p) {
|
|
|
|
|
|
|
|
|
|
while (c->monologues.head) {
|
|
|
|
|
m = g_queue_pop_head(&c->monologues);
|
|
|
|
|
|
|
|
|
|
g_ptr_array_free(m->medias, true);
|
|
|
|
|
g_hash_table_destroy(m->associated_tags);
|
|
|
|
|
g_hash_table_destroy(m->media_ids);
|
|
|
|
|
free_ssrc_hash(&m->ssrc_hash);
|
|
|
|
|
if (m->last_out_sdp)
|
|
|
|
|
g_string_free(m->last_out_sdp, TRUE);
|
|
|
|
|
str_free_dup(&m->last_in_sdp);
|
|
|
|
|
sdp_free(&m->last_in_sdp_parsed);
|
|
|
|
|
sdp_streams_free(&m->last_in_sdp_streams);
|
|
|
|
|
g_hash_table_destroy(m->subscribers_ht);
|
|
|
|
|
g_hash_table_destroy(m->subscriptions_ht);
|
|
|
|
|
g_queue_clear_full(&m->subscribers, call_subscription_free);
|
|
|
|
|
g_queue_clear_full(&m->subscriptions, call_subscription_free);
|
|
|
|
|
g_slice_free1(sizeof(*m), m);
|
|
|
|
|
__monologue_free(m);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (c->medias.head) {
|
|
|
|
|
|