diff src/away.c @ 4274:906f61f27479

[gaim-migrate @ 4525] (01:26:02) Robot101: guess which bugs I fixed (01:26:14) Me: i can't (01:26:26) Robot101: really common crash... (01:26:35) Robot101: I fixed the return from away crash! =) committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Fri, 10 Jan 2003 06:32:14 +0000
parents 7002b6f16bdf
children 5fb47ec9bfe4
line wrap: on
line diff
--- a/src/away.c	Fri Jan 10 01:33:09 2003 +0000
+++ b/src/away.c	Fri Jan 10 06:32:14 2003 +0000
@@ -53,30 +53,33 @@
 	imaway = NULL;
 }
 
-void purge_away_queue(GSList *queue)
+void purge_away_queue(GSList **queue)
 {
+	GSList *q = *queue;
+	struct queued_message *qm;
 	struct conversation *cnv;
 
-	gtk_clist_freeze(GTK_CLIST(clistqueue));
-	gtk_clist_clear(GTK_CLIST(clistqueue));
-
-	while (queue) {
-		struct queued_message *qm = queue->data;
+	while (q) {
+		qm = q->data;
 
 		cnv = find_conversation(qm->name);
 		if (!cnv)
 			cnv = new_conversation(qm->name);
+
 		if (g_slist_index(connections, qm->gc) >= 0)
 			set_convo_gc(cnv, qm->gc);
+
 		write_to_conv(cnv, qm->message, qm->flags, NULL, qm->tm, qm->len);
 
-		queue = g_slist_remove(queue, qm);
-
 		g_free(qm->message);
 		g_free(qm);
+
+		q->data = NULL;
+		q = q->next;
 	}
 
-	gtk_clist_thaw(GTK_CLIST(clistqueue));
+	g_slist_free(*queue);
+	*queue = NULL;
 }
 
 void dequeue_by_buddy(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data) {
@@ -134,7 +137,8 @@
 	} else {
 		gtk_widget_hide(clistqueue);
 		gtk_widget_hide(clistqueuesw);
-		purge_away_queue(message_queue);
+		gtk_clist_clear(GTK_CLIST(clistqueue));
+		purge_away_queue(&message_queue);
 	}
 }
 
@@ -143,7 +147,12 @@
 	if (imaway) {
 		GtkWidget *tmp = imaway;
 
-		purge_away_queue(message_queue);
+		gtk_clist_freeze(GTK_CLIST(clistqueue));
+		gtk_clist_clear(GTK_CLIST(clistqueue));
+
+		purge_away_queue(&message_queue);
+
+		gtk_clist_thaw(GTK_CLIST(clistqueue));
 
 		imaway = NULL;
 		gtk_widget_destroy(tmp);