# HG changeset patch # User maiku@pidgin.im # Date 1256754250 0 # Node ID bcee1aab1c016c83ce6740499acbd0149cad9690 # Parent 80bdae3ea9577404c8cf9811eb18d9ef4d09f222 Keep track of participants better in purple_media_stream_info. diff -r 80bdae3ea957 -r bcee1aab1c01 libpurple/media/media.c --- a/libpurple/media/media.c Wed Oct 28 18:16:59 2009 +0000 +++ b/libpurple/media/media.c Wed Oct 28 18:24:10 2009 +0000 @@ -809,7 +809,7 @@ return; } else if (type == PURPLE_MEDIA_INFO_HANGUP || type == PURPLE_MEDIA_INFO_REJECT) { - GList *streams, *participants = NULL; + GList *streams; g_return_if_fail(PURPLE_IS_MEDIA(media)); @@ -825,12 +825,6 @@ purple_media_signals[STREAM_INFO], 0, type, stream->session->id, stream->participant, local); - - if (g_list_find_custom(participants, - stream->participant, - (GCompareFunc)strcmp) == NULL) - participants = g_list_prepend(participants, - g_strdup(stream->participant)); } if (session_id != NULL && participant != NULL) { @@ -839,6 +833,7 @@ /* Emit for everything in the conference */ GList *sessions = g_hash_table_get_values( media->priv->sessions); + GList *participants = media->priv->participants; /* Emit for sessions */ for (; sessions; sessions = g_list_delete_link( @@ -852,15 +847,12 @@ /* Emit for participants */ for (; participants; participants = - g_list_delete_link( - participants, participants)) { + g_list_next(participants)) { gchar *participant = participants->data; g_signal_emit(media, purple_media_signals[ STREAM_INFO], 0, type, NULL, participant, local); - - g_free(participant); } /* Emit for conference */ @@ -884,7 +876,7 @@ } } else if (participant != NULL) { /* Emit just the specific participant */ - if (!g_list_find_custom(participants, + if (!g_list_find_custom(media->priv->participants, participant, (GCompareFunc)strcmp)) { purple_debug_warning("media", "Couldn't find participant" @@ -896,12 +888,6 @@ } } - /* Clear participants if any remain */ - for (; participants; participants = g_list_delete_link( - participants, participants)) { - g_free(participants->data); - } - purple_media_end(media, session_id, participant); return; }