changeset 25702:a1a1f44cdecc

Fixed some memory leak issues involving GLists.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Fri, 11 Jul 2008 02:10:04 +0000
parents 5736b1881bf4
children 8c4bc05513c7
files libpurple/media.c libpurple/protocols/jabber/jingle.c pidgin/gtkmedia.c
diffstat 3 files changed, 10 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/media.c	Fri Jul 11 01:35:54 2008 +0000
+++ b/libpurple/media.c	Fri Jul 11 02:10:04 2008 +0000
@@ -337,12 +337,11 @@
 	GList *values = g_hash_table_get_values(media->priv->sessions);
 	PurpleMediaStreamType type = PURPLE_MEDIA_NONE;
 
-	for (; values; values = values->next) {
+	for (; values; values = g_list_delete_link(values, values)) {
 		PurpleMediaSession *session = values->data;
 		type |= session->type;
 	}
 
-	g_list_free(values);
 	return type;
 }
 
@@ -458,7 +457,7 @@
 {
 	GList *values = g_hash_table_get_values(media->priv->sessions);
 
-	for (; values; values = values->next) {
+	for (; values; values = g_list_delete_link(values, values)) {
 		PurpleMediaSession *session = (PurpleMediaSession*)values->data;
 
 		if (session->type & PURPLE_MEDIA_SEND_AUDIO && audio_src)
@@ -470,8 +469,6 @@
 		if (session->type & PURPLE_MEDIA_RECV_VIDEO && video_sink)
 			*video_sink = session->sink;
 	}
-
-	g_list_free(values);
 }
 
 void 
--- a/libpurple/protocols/jabber/jingle.c	Fri Jul 11 01:35:54 2008 +0000
+++ b/libpurple/protocols/jabber/jingle.c	Fri Jul 11 02:10:04 2008 +0000
@@ -250,17 +250,17 @@
 static void
 jabber_jingle_session_destroy(JingleSession *sess)
 {
-	GList *contents = g_hash_table_get_values(sess->contents);
+	GList *contents;
 	g_hash_table_remove(sess->js->sessions, sess->id);
 	g_free(sess->id);
 
 	if (sess->media)
 		g_object_unref(sess->media);
 
-	for (; contents; contents = contents->next)
+	for (contents = g_hash_table_get_values(sess->contents); contents;
+			contents = g_list_delete_link(contents, contents))
 		jabber_jingle_session_destroy_content(contents->data);
 
-	g_list_free(contents);
 	g_free(sess);
 }
 
@@ -278,11 +278,10 @@
 jabber_jingle_session_find_by_jid(JabberStream *js, const char *jid)
 {
 	GList *values = g_hash_table_get_values(js->sessions);
-	GList *iter = values;
 	gboolean use_bare = strchr(jid, '/') == NULL;
 
-	for (; iter; iter = iter->next) {
-		JingleSession *session = (JingleSession *)iter->data;
+	for (; values; values = g_list_delete_link(values, values)) {
+		JingleSession *session = (JingleSession *)values->data;
 		gchar *cmp_jid = use_bare ? jabber_get_bare_jid(session->remote_jid)
 					  : g_strdup(session->remote_jid);
 		if (!strcmp(jid, cmp_jid)) {
@@ -293,7 +292,6 @@
 		g_free(cmp_jid);
 	}
 
-	g_list_free(values);
 	return NULL;	
 }
 
@@ -947,7 +945,7 @@
 		return FALSE;
 	}
 
-	for (; contents; contents = contents->next) {
+	for (; contents; contents = g_list_delete_link(contents, contents)) {
 		JingleSessionContent *jsc = contents->data;
 		gboolean result = FALSE;
 
@@ -969,7 +967,6 @@
 			return FALSE;
 		}
 	}
-	g_list_free(contents);
 
 	jabber_jingle_session_set_remote_jid(session, remote_jid);
 	jabber_jingle_session_set_initiator(session, initiator);
@@ -1115,12 +1112,10 @@
 	GList *values = js->sessions ?
 			g_hash_table_get_values(js->sessions) : NULL;
 
-	for (; values; values = values->next) {
+	for (; values; values = g_list_delete_link(values, values)) {
 		JingleSession *session = (JingleSession *)values->data;
 		purple_media_hangup(session->media);
 	}
-
-	g_list_free(values);
 }
 
 static void
--- a/pidgin/gtkmedia.c	Fri Jul 11 01:35:54 2008 +0000
+++ b/pidgin/gtkmedia.c	Fri Jul 11 02:10:04 2008 +0000
@@ -298,7 +298,7 @@
 	GList *sessions = purple_media_get_session_names(media);
 	GstBus *bus;
 
-	for (; sessions; sessions = sessions->next) {
+	for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
 		if (purple_media_get_session_type(media, sessions->data) & PURPLE_MEDIA_AUDIO) {
 			if (!audiosendbin)
 				purple_media_audio_init_src(&audiosendbin, &audiosendlevel);
@@ -315,7 +315,6 @@
 			purple_media_set_sink(media, sessions->data, videorecvbin);
 		}
 	}
-	g_list_free(sessions);
 
 	if (audiosendlevel && audiorecvlevel) {
 		g_object_set(gtkmedia, "send-level", audiosendlevel,