MT#55283 fix mem leak

SDP attributes have been moved to the call's memory arena in 5115fe000.
Make sure the redis restore code uses the same.

Remove some redundant null checks as well.

Closes #1959

Change-Id: I2f37869f5f2c95999d028c811c6a0eb10215f576
pull/1964/head
Richard Fuchs 10 months ago
parent 4f664646b0
commit a7a43c9b75

@ -2755,8 +2755,7 @@ static void __call_monologue_init_from_flags(struct call_monologue *ml, struct c
/* origin (name, version etc.) */
if (flags->session_sdp_orig.parsed) {
if (ml->session_sdp_orig)
sdp_orig_free(ml->session_sdp_orig);
sdp_orig_free(ml->session_sdp_orig);
ml->session_sdp_orig = sdp_orig_dup(&flags->session_sdp_orig);
}
@ -4318,10 +4317,8 @@ void __monologue_free(struct call_monologue *m) {
t_hash_table_destroy(m->media_ids);
if (m->last_out_sdp)
g_string_free(m->last_out_sdp, TRUE);
if (m->session_sdp_orig)
sdp_orig_free(m->session_sdp_orig);
if (m->session_last_sdp_orig)
sdp_orig_free(m->session_last_sdp_orig);
sdp_orig_free(m->session_sdp_orig);
sdp_orig_free(m->session_last_sdp_orig);
t_queue_clear_full(&m->generic_attributes, sdp_attr_free);
t_queue_clear_full(&m->all_attributes, sdp_attr_free);
t_queue_clear(&m->tag_aliases);

@ -32,6 +32,7 @@
#include "ssrc.h"
#include "main.h"
#include "codec.h"
#include "sdp.h"
typedef union {
GQueue *q;
@ -1517,39 +1518,41 @@ static int redis_tags(call_t *c, struct redis_list *tags, parser_arg arg) {
ml->sdp_session_timing = call_str_cpy(&s);
/* o= */
if (!redis_hash_get_str(&s, rh, "sdp_orig_parsed")) {
sdp_orig_free(ml->session_sdp_orig);
ml->session_sdp_orig = g_new0(__typeof(*ml->session_sdp_orig), 1);
ml->session_sdp_orig->parsed = 1;
redis_hash_get_llu(&ml->session_sdp_orig->version_num, rh, "sdp_orig_version_num");
if (!redis_hash_get_str(&s, rh, "sdp_orig_username"))
ml->session_sdp_orig->username = str_dup_str(&s);
ml->session_sdp_orig->username = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "sdp_orig_session_id"))
ml->session_sdp_orig->session_id = str_dup_str(&s);
ml->session_sdp_orig->session_id = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "sdp_orig_version_str"))
ml->session_sdp_orig->version_str = str_dup_str(&s);
ml->session_sdp_orig->version_str = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "sdp_orig_address_network_type"))
ml->session_sdp_orig->address.network_type = str_dup_str(&s);
ml->session_sdp_orig->address.network_type = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "sdp_orig_address_address_type"))
ml->session_sdp_orig->address.address_type = str_dup_str(&s);
ml->session_sdp_orig->address.address_type = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "sdp_orig_address_address"))
ml->session_sdp_orig->address.address = str_dup_str(&s);
ml->session_sdp_orig->address.address = call_str_cpy(&s);
}
/* o= last used of the other side*/
if (!redis_hash_get_str(&s, rh, "last_sdp_orig_parsed")) {
sdp_orig_free(ml->session_last_sdp_orig);
ml->session_last_sdp_orig = g_new0(__typeof(*ml->session_last_sdp_orig), 1);
ml->session_last_sdp_orig->parsed = 1;
redis_hash_get_llu(&ml->session_last_sdp_orig->version_num, rh, "last_sdp_orig_version_num");
if (!redis_hash_get_str(&s, rh, "last_sdp_orig_username"))
ml->session_last_sdp_orig->username = str_dup_str(&s);
ml->session_last_sdp_orig->username = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "last_sdp_orig_session_id"))
ml->session_last_sdp_orig->session_id = str_dup_str(&s);
ml->session_last_sdp_orig->session_id = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "last_sdp_orig_version_str"))
ml->session_last_sdp_orig->version_str = str_dup_str(&s);
ml->session_last_sdp_orig->version_str = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "last_sdp_orig_address_network_type"))
ml->session_last_sdp_orig->address.network_type = str_dup_str(&s);
ml->session_last_sdp_orig->address.network_type = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "last_sdp_orig_address_address_type"))
ml->session_last_sdp_orig->address.address_type = str_dup_str(&s);
ml->session_last_sdp_orig->address.address_type = call_str_cpy(&s);
if (!redis_hash_get_str(&s, rh, "last_sdp_orig_address_address"))
ml->session_last_sdp_orig->address.address = str_dup_str(&s);
ml->session_last_sdp_orig->address.address = call_str_cpy(&s);
}
ml->sdp_session_bandwidth.as = (!redis_hash_get_ld(&il, rh, "sdp_session_as")) ? il : -1;

Loading…
Cancel
Save