Browse Source

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 6 months ago
parent
commit
a7a43c9b75
2 changed files with 18 additions and 18 deletions
  1. +3
    -6
      daemon/call.c
  2. +15
    -12
      daemon/redis.c

+ 3
- 6
daemon/call.c View File

@ -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);


+ 15
- 12
daemon/redis.c View File

@ -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