diff --git a/daemon/call.c b/daemon/call.c index 2cfe6f1df..a1cabab2c 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -4619,7 +4619,6 @@ int monologue_unsubscribe(struct call_monologue *dst_ml, struct call_monologue * __media_unconfirm(media, "media unsubscribe"); - /* TODO: should we care about subscribers as well? */ IQUEUE_FOREACH_SAFE(&media->media_subscriptions, ms) { if (src_ml && ms->monologue != src_ml) continue; @@ -4631,6 +4630,19 @@ int monologue_unsubscribe(struct call_monologue *dst_ml, struct call_monologue * update_init_subscribers(src_media, NULL, NULL, flags->opmode); } + if (flags->bidirectional) { + IQUEUE_FOREACH_SAFE(&media->media_subscribers, ms) { + if (src_ml && ms->monologue != src_ml) + continue; + + struct call_media *src_media = ms->media; + + __media_unconfirm(src_media, "media unsubscribe"); + __unsubscribe_media_link(src_media, ms->reverse); + update_init_subscribers(src_media, NULL, NULL, flags->opmode); + } + } + update_init_subscribers(media, NULL, NULL, flags->opmode); }