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
(cherry picked from commit a7a43c9b75)
mr13.3
Richard Fuchs 6 months ago
parent
commit
0c888b2b2a
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

@ -2800,8 +2800,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);
}
@ -4359,10 +4358,8 @@ void __monologue_free(struct call_monologue *m) {
free_ssrc_hash(&m->ssrc_hash);
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;
@ -1514,39 +1515,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