changeset 52753:551e8ebadb62

Fix memory leaks (from YAMAMOTO Mitsuharu)
author Jan Djärv <jan.h.d@swipnet.se>
date Sun, 05 Oct 2003 12:15:39 +0000
parents 751a01f97570
children d08832a11cfd
files src/ChangeLog src/frame.c src/xfns.c src/xterm.c
diffstat 4 files changed, 24 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Oct 05 11:52:47 2003 +0000
+++ b/src/ChangeLog	Sun Oct 05 12:15:39 2003 +0000
@@ -1,5 +1,13 @@
 2003-10-05  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
+	* frame.c (Fdelete_frame): Free decode_mode_spec_buffer.
+
+	* xterm.c (x_delete_display): Free font names and font_encoder
+	in dpyinfo->font_table.
+
+	* xfns.c (Fx_close_connection): Only call XFreeFont here.  xfree
+	of font names moved to x_delete_display.
+
 	* xterm.h (struct x_display_info): New member, wm_type.
 	(struct x_output): New members, expected_top/left and
 	check_expected_move.
--- a/src/frame.c	Sun Oct 05 11:52:47 2003 +0000
+++ b/src/frame.c	Sun Oct 05 12:15:39 2003 +0000
@@ -1279,6 +1279,8 @@
 
   if (f->namebuf)
     xfree (f->namebuf);
+  if (f->decode_mode_spec_buffer)
+    xfree (f->decode_mode_spec_buffer);
   if (FRAME_INSERT_COST (f))
     xfree (FRAME_INSERT_COST (f));
   if (FRAME_DELETEN_COST (f))
--- a/src/xfns.c	Sun Oct 05 11:52:47 2003 +0000
+++ b/src/xfns.c	Sun Oct 05 12:15:39 2003 +0000
@@ -4212,9 +4212,6 @@
   for (i = 0; i < dpyinfo->n_fonts; i++)
     if (dpyinfo->font_table[i].name)
       {
-	if (dpyinfo->font_table[i].name != dpyinfo->font_table[i].full_name)
-	  xfree (dpyinfo->font_table[i].full_name);
-	xfree (dpyinfo->font_table[i].name);
 	XFreeFont (dpyinfo->display, dpyinfo->font_table[i].font);
       }
 
--- a/src/xterm.c	Sun Oct 05 11:52:47 2003 +0000
+++ b/src/xterm.c	Sun Oct 05 12:15:39 2003 +0000
@@ -10649,6 +10649,8 @@
 x_delete_display (dpyinfo)
      struct x_display_info *dpyinfo;
 {
+  int i;
+
   delete_keyboard_wait_descriptor (dpyinfo->connection);
 
   /* Discard this display from x_display_name_list and x_display_list.
@@ -10700,6 +10702,18 @@
     xim_close_dpy (dpyinfo);
 #endif
 
+  /* Free the font names in the font table.  */
+  for (i = 0; i < dpyinfo->n_fonts; i++)
+    if (dpyinfo->font_table[i].name)
+      {
+	if (dpyinfo->font_table[i].name != dpyinfo->font_table[i].full_name)
+	  xfree (dpyinfo->font_table[i].full_name);
+	xfree (dpyinfo->font_table[i].name);
+      }
+
+  if (dpyinfo->font_table->font_encoder)
+    xfree (dpyinfo->font_table->font_encoder);
+
   xfree (dpyinfo->font_table);
   xfree (dpyinfo->x_id_name);
   xfree (dpyinfo->color_cells);