diff options
author | Michael Ruprecht <maiku@pidgin.im> | 2009-10-27 17:48:26 +0000 |
---|---|---|
committer | Michael Ruprecht <maiku@pidgin.im> | 2009-10-27 17:48:26 +0000 |
commit | 75d615d7f91432e0b9e0ff809d699836781046e5 (patch) | |
tree | 9b03562452ad0d892f9f9479903332b60b32592e | |
parent | 9209d6b82614fed38f25cb54a18875b251838637 (diff) | |
download | pidgin-75d615d7f91432e0b9e0ff809d699836781046e5.tar.gz |
Properly free PurpleMediaBackendFs2Stream's.
-rw-r--r-- | libpurple/media/backend-fs2.c | 36 | ||||
-rw-r--r-- | libpurple/media/media.c | 9 |
2 files changed, 36 insertions, 9 deletions
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c index 9aaf47958a..46a2dfe306 100644 --- a/libpurple/media/backend-fs2.c +++ b/libpurple/media/backend-fs2.c @@ -154,6 +154,7 @@ purple_media_backend_fs2_dispose(GObject *obj) { PurpleMediaBackendFs2Private *priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj); + GList *iter = NULL; purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n"); @@ -211,6 +212,14 @@ purple_media_backend_fs2_dispose(GObject *obj) priv->participants = NULL; } + for (iter = priv->streams; iter; iter = g_list_next(iter)) { + PurpleMediaBackendFs2Stream *stream = iter->data; + if (stream->stream) { + g_object_unref(stream->stream); + stream->stream = NULL; + } + } + if (priv->media) { g_object_remove_weak_pointer(G_OBJECT(priv->media), (gpointer*)&priv->media); @@ -230,6 +239,33 @@ purple_media_backend_fs2_finalize(GObject *obj) g_free(priv->conference_type); + for (; priv->streams; priv->streams = + g_list_delete_link(priv->streams, priv->streams)) { + PurpleMediaBackendFs2Stream *stream = priv->streams->data; + + /* Remove the connected_cb timeout */ + if (stream->connected_cb_id != 0) + purple_timeout_remove(stream->connected_cb_id); + + g_free(stream->participant); + + if (stream->local_candidates) + fs_candidate_list_destroy(stream->local_candidates); + + if (stream->remote_candidates) + fs_candidate_list_destroy(stream->remote_candidates); + + if (stream->active_local_candidates) + fs_candidate_list_destroy( + stream->active_local_candidates); + + if (stream->active_remote_candidates) + fs_candidate_list_destroy( + stream->active_remote_candidates); + + g_free(stream); + } + if (priv->sessions) { GList *sessions = g_hash_table_get_values(priv->sessions); diff --git a/libpurple/media/media.c b/libpurple/media/media.c index 83038f0c28..985d77ba7a 100644 --- a/libpurple/media/media.c +++ b/libpurple/media/media.c @@ -350,7 +350,6 @@ static void purple_media_dispose(GObject *media) { PurpleMediaPrivate *priv = PURPLE_MEDIA_GET_PRIVATE(media); - GList *iter = NULL; purple_debug_info("media","purple_media_dispose\n"); @@ -361,14 +360,6 @@ purple_media_dispose(GObject *media) priv->backend = NULL; } - for (iter = priv->streams; iter; iter = g_list_next(iter)) { - PurpleMediaStream *stream = iter->data; - if (stream->stream) { - g_object_unref(stream->stream); - stream->stream = NULL; - } - } - if (priv->gst_bus_handler_id != 0) { GstElement *pipeline = purple_media_manager_get_pipeline( priv->manager); |