summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/chanopt.c18
-rw-r--r--src/common/chanopt.h2
-rw-r--r--src/common/hexchat.c2
-rw-r--r--src/common/outbound.c2
4 files changed, 15 insertions, 9 deletions
diff --git a/src/common/chanopt.c b/src/common/chanopt.c
index 56d1b1eb..9b7c4f24 100644
--- a/src/common/chanopt.c
+++ b/src/common/chanopt.c
@@ -396,7 +396,7 @@ chanopt_save_one_channel (chanopt_in_memory *co, int fh)
 }
 
 void
-chanopt_save_all (void)
+chanopt_save_all (gboolean flush)
 {
 	int i;
 	int num_saved;
@@ -438,15 +438,21 @@ chanopt_save_all (void)
 		}
 
 cont:
-		g_free (co->network);
-		g_free (co->channel);
-		g_free (co);
+		if (flush)
+		{
+			g_free (co->network);
+			g_free (co->channel);
+			g_free (co);
+		}
 	}
 
 	close (fh);
 
-	g_slist_free (chanopt_list);
-	chanopt_list = NULL;
+	if (flush)
+	{
+		g_slist_free (chanopt_list);
+		chanopt_list = NULL;
+	}
 
 	chanopt_open = FALSE;
 	chanopt_changed = FALSE;
diff --git a/src/common/chanopt.h b/src/common/chanopt.h
index 18b9a432..a5494605 100644
--- a/src/common/chanopt.h
+++ b/src/common/chanopt.h
@@ -22,7 +22,7 @@
 
 int chanopt_command (session *sess, char *tbuf, char *word[], char *word_eol[]);
 gboolean chanopt_is_set (unsigned int global, guint8 per_chan_setting);
-void chanopt_save_all (void);
+void chanopt_save_all (gboolean flush);
 void chanopt_save (session *sess);
 void chanopt_load (session *sess);
 
diff --git a/src/common/hexchat.c b/src/common/hexchat.c
index caa20eb7..499df8b0 100644
--- a/src/common/hexchat.c
+++ b/src/common/hexchat.c
@@ -960,7 +960,7 @@ hexchat_exit (void)
 	notify_save ();
 	ignore_save ();
 	free_sessions ();
-	chanopt_save_all ();
+	chanopt_save_all (TRUE);
 	servlist_cleanup ();
 	fe_exit ();
 }
diff --git a/src/common/outbound.c b/src/common/outbound.c
index 5ca8b783..fed83714 100644
--- a/src/common/outbound.c
+++ b/src/common/outbound.c
@@ -581,7 +581,7 @@ cmd_chanopt (struct session *sess, char *tbuf, char *word[], char *word_eol[])
 	
 	/* chanopt.c */
 	ret = chanopt_command (sess, tbuf, word, word_eol);
-	chanopt_save_all ();
+	chanopt_save_all (FALSE);
 	
 	return ret;
 }