Browse Source

MT#57719 redis: move media to monologue linking to `json_medias()`

Move linking of the media to its monologue, from the `json_link_medias()`
to the `json_medias()`. This is required, becase the `json_link_medias()`
already needs to operate on medias list, which is fully linked
to their monologues. Otherwise it can happen, that during the
linking of media to media in `json_link_medias()` (subscribing them)
the monologue for the other media is still not linked.

Change-Id: Ifc4dd8dff27f65e664b4fd21332a1d296d07759b
dzenichev/fictitious
Donat Zenichev 2 years ago
parent
commit
bf2403f67c
1 changed files with 10 additions and 9 deletions
  1. +10
    -9
      daemon/redis.c

+ 10
- 9
daemon/redis.c View File

@ -1545,7 +1545,9 @@ static int rbl_cb_plts_r(str *s, callback_arg_t dummy, struct redis_list *list,
codec_store_add_raw(&med->codecs, rbl_cb_plts_g(s, list, ptr)); codec_store_add_raw(&med->codecs, rbl_cb_plts_g(s, list, ptr));
return 0; return 0;
} }
static int json_medias(struct call *c, struct redis_list *medias, JsonReader *root_reader) {
static int json_medias(struct call *c, struct redis_list *medias, struct redis_list *tags,
JsonReader *root_reader)
{
unsigned int i; unsigned int i;
struct redis_hash *rh; struct redis_hash *rh;
struct call_media *med; struct call_media *med;
@ -1595,6 +1597,9 @@ static int json_medias(struct call *c, struct redis_list *medias, JsonReader *ro
json_build_list_cb((callback_arg_t) NULL, c, "payload_types", i, NULL, rbl_cb_plts_r, med, root_reader); json_build_list_cb((callback_arg_t) NULL, c, "payload_types", i, NULL, rbl_cb_plts_r, med, root_reader);
/* XXX dtls */ /* XXX dtls */
/* link monologue */
med->monologue = redis_list_get_ptr(tags, &medias->rh[i], "tag");
medias->ptrs[i] = med; medias->ptrs[i] = med;
} }
@ -1829,17 +1834,13 @@ static int json_link_streams(struct call *c, struct redis_list *streams,
} }
static int json_link_medias(struct call *c, struct redis_list *medias, static int json_link_medias(struct call *c, struct redis_list *medias,
struct redis_list *streams, struct redis_list *maps, struct redis_list *tags, JsonReader *root_reader)
struct redis_list *streams, struct redis_list *maps, JsonReader *root_reader)
{ {
for (unsigned int i = 0; i < medias->len; i++) for (unsigned int i = 0; i < medias->len; i++)
{ {
struct call_media *med = medias->ptrs[i]; struct call_media *med = medias->ptrs[i];
if (!med)
if (!med || !med->monologue)
continue; continue;
med->monologue = redis_list_get_ptr(tags, &medias->rh[i], "tag");
if (!med->monologue)
return -1;
if (json_build_list(&med->streams, c, "streams", i, streams, root_reader)) if (json_build_list(&med->streams, c, "streams", i, streams, root_reader))
return -1; return -1;
if (json_build_list(&med->endpoint_maps, c, "maps", i, maps, root_reader)) if (json_build_list(&med->endpoint_maps, c, "maps", i, maps, root_reader))
@ -2044,7 +2045,7 @@ static void json_restore_call(struct redis *r, const str *callid, bool foreign)
if (redis_tags(c, &tags, root_reader)) if (redis_tags(c, &tags, root_reader))
goto err8; goto err8;
err = "failed to create medias"; err = "failed to create medias";
if (json_medias(c, &medias, root_reader))
if (json_medias(c, &medias, &tags, root_reader))
goto err8; goto err8;
err = "failed to create maps"; err = "failed to create maps";
if (redis_maps(c, &maps)) if (redis_maps(c, &maps))
@ -2060,7 +2061,7 @@ static void json_restore_call(struct redis *r, const str *callid, bool foreign)
if (json_link_tags(c, &tags, &medias, root_reader)) if (json_link_tags(c, &tags, &medias, root_reader))
goto err8; goto err8;
err = "failed to link medias"; err = "failed to link medias";
if (json_link_medias(c, &medias, &streams, &maps, &tags, root_reader))
if (json_link_medias(c, &medias, &streams, &maps, root_reader))
goto err8; goto err8;
err = "failed to link maps"; err = "failed to link maps";
if (json_link_maps(c, &maps, &sfds, root_reader)) if (json_link_maps(c, &maps, &sfds, root_reader))


Loading…
Cancel
Save