MT#55283 fix __unsubscribe_all_from_media

Use the correct list/table direction for removal

Change-Id: Idaf1a8cc32d9a4732c8b9ba6121b0926315d5820
pull/2105/head
Richard Fuchs 1 week ago
parent cc0f04fba2
commit 6ed2e239d3

@ -4075,13 +4075,11 @@ void media_subscriptions_clear(subscription_q *q) {
i_queue_clear_full(q, media_subscription_free); i_queue_clear_full(q, media_subscription_free);
} }
__attribute__((nonnull(1, 2))) __attribute__((nonnull(1, 2, 3, 4)))
static inline void __unsubscribe_media_link_store(struct call_media *which, struct media_subscription *ms, static inline void __remove_sub_link_store(struct call_media *which, struct media_subscription *ms,
struct call_media *from, struct media_subscription *rev_ms,
subscription_store_ht ht) subscription_store_ht ht)
{ {
struct media_subscription *rev_ms = ms->reverse;
struct call_media *from = ms->media;
ilog(LOG_DEBUG, "Unsubscribing media with monologue tag '" STR_FORMAT_M "' (index: %d) " ilog(LOG_DEBUG, "Unsubscribing media with monologue tag '" STR_FORMAT_M "' (index: %d) "
"from media with monologue tag '" STR_FORMAT_M "' (index: %d)", "from media with monologue tag '" STR_FORMAT_M "' (index: %d)",
STR_FMT_M(&which->monologue->tag), which->index, STR_FMT_M(&which->monologue->tag), which->index,
@ -4101,6 +4099,20 @@ static inline void __unsubscribe_media_link_store(struct call_media *which, stru
g_free(rev_ms); g_free(rev_ms);
} }
__attribute__((nonnull(1, 2)))
static inline void __unsubscribe_media_link_store(struct call_media *which, struct media_subscription *ms,
subscription_store_ht ht)
{
__remove_sub_link_store(which, ms, ms->media, ms->reverse, ht);
}
__attribute__((nonnull(1, 2)))
static inline void __unsubscribe_subscriber_media_link(struct call_media *from, struct media_subscription *rev_ms)
{
__remove_sub_link_store(rev_ms->media, rev_ms->reverse, from, rev_ms, subscription_store_ht_null());
}
__attribute__((nonnull(1, 2))) __attribute__((nonnull(1, 2)))
static void __unsubscribe_media_link(struct call_media *which, struct media_subscription *ms) static void __unsubscribe_media_link(struct call_media *which, struct media_subscription *ms)
{ {
@ -4157,10 +4169,10 @@ INLINE void __unsubscribe_media_from_all(struct call_media *media, subscription_
} }
__attribute__((nonnull(1))) __attribute__((nonnull(1)))
INLINE void __unsubscribe_all_from_media(struct call_media *media, subscription_store_ht ht) INLINE void __unsubscribe_all_from_media(struct call_media *media)
{ {
IQUEUE_FOREACH_SAFE(&media->media_subscribers, subscription) IQUEUE_FOREACH_SAFE(&media->media_subscribers, subscription)
__unsubscribe_media_link_store(media, subscription, ht); __unsubscribe_subscriber_media_link(media, subscription);
} }
__attribute__((nonnull(1))) __attribute__((nonnull(1)))
@ -4172,7 +4184,7 @@ INLINE void unsubscribe_media_from_all(struct call_media *media)
__attribute__((nonnull(1))) __attribute__((nonnull(1)))
INLINE void unsubscribe_all_from_media(struct call_media *media) INLINE void unsubscribe_all_from_media(struct call_media *media)
{ {
__unsubscribe_all_from_media(media, subscription_store_ht_null()); __unsubscribe_all_from_media(media);
} }
__attribute__((nonnull(1))) __attribute__((nonnull(1)))
@ -4189,7 +4201,7 @@ INLINE void __unsubscribe_monologue_from_all(struct call_monologue *ml, subscrip
} }
__attribute__((nonnull(1))) __attribute__((nonnull(1)))
INLINE void __unsubscribe_all_from_monologue(struct call_monologue *ml, subscription_store_ht ht) INLINE void __unsubscribe_all_from_monologue(struct call_monologue *ml)
{ {
for (unsigned int i = 0; i < ml->medias->len; i++) for (unsigned int i = 0; i < ml->medias->len; i++)
{ {
@ -4197,7 +4209,7 @@ INLINE void __unsubscribe_all_from_monologue(struct call_monologue *ml, subscrip
if (!media) if (!media)
continue; continue;
__unsubscribe_all_from_media(media, ht); __unsubscribe_all_from_media(media);
} }
} }

Loading…
Cancel
Save