@ -3061,18 +3061,24 @@ out:
unconfirm_sinks ( & phc - > mp . stream - > rtcp_sinks , " peer address unconfirmed " ) ;
}
if ( phc - > unkernelize_subscriptions ) {
// XXX optimise this triple loop?
for ( GList * l = phc - > mp . media - > monologue - > subscriptions . head ; l ; l = l - > next ) {
struct call_subscription * cs = l - > data ;
struct call_monologue * sub = cs - > monologue ;
for ( unsigned int k = 0 ; k < sub - > medias - > len ; k + + ) {
struct call_media * sub_media = sub - > medias - > pdata [ k ] ;
if ( ! sub_media )
continue ;
for ( GList * m = sub_media - > streams . head ; m ; m = m - > next ) {
struct packet_stream * sub_ps = m - > data ;
__unkernelize ( sub_ps , " subscriptions modified " ) ;
AUTO_CLEANUP ( GQueue mls , g_queue_clear ) = G_QUEUE_INIT ; /* to avoid duplications */
for ( GList * sub = phc - > mp . media - > media_subscriptions . head ; sub ; sub = sub - > next )
{
struct media_subscription * ms = sub - > data ;
if ( ! g_queue_find ( & mls , ms - > monologue ) ) {
for ( unsigned int k = 0 ; k < ms - > monologue - > medias - > len ; k + + )
{
struct call_media * sub_media = ms - > monologue - > medias - > pdata [ k ] ;
if ( ! sub_media )
continue ;
for ( GList * m = sub_media - > streams . head ; m ; m = m - > next ) {
struct packet_stream * sub_ps = m - > data ;
__unkernelize ( sub_ps , " subscriptions modified " ) ;
}
}
g_queue_push_tail ( & mls , ms - > monologue ) ;
}
}
}