summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Ruprecht <maiku@pidgin.im>2009-10-27 17:48:26 +0000
committerMichael Ruprecht <maiku@pidgin.im>2009-10-27 17:48:26 +0000
commit75d615d7f91432e0b9e0ff809d699836781046e5 (patch)
tree9b03562452ad0d892f9f9479903332b60b32592e
parent9209d6b82614fed38f25cb54a18875b251838637 (diff)
downloadpidgin-75d615d7f91432e0b9e0ff809d699836781046e5.tar.gz
Properly free PurpleMediaBackendFs2Stream's.
-rw-r--r--libpurple/media/backend-fs2.c36
-rw-r--r--libpurple/media/media.c9
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);