]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix memory leaks (from YAMAMOTO Mitsuharu)
authorJan Djärv <jan.h.d@swipnet.se>
Sun, 5 Oct 2003 12:15:39 +0000 (12:15 +0000)
committerJan Djärv <jan.h.d@swipnet.se>
Sun, 5 Oct 2003 12:15:39 +0000 (12:15 +0000)
src/ChangeLog
src/frame.c
src/xfns.c
src/xterm.c

index b38aff206e38ca4dd872532ed37d6f1fb623d920..1dfef46a7ce7d31d6a987cebb3f78e230d554033 100644 (file)
@@ -1,5 +1,13 @@
 2003-10-05  Jan Dj\e,Ad\e(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.
index 17952b5ca162a543f1536ac0a1fbb43fc08304fd..87175e0c6c9030ab207c359de17eafe4fd9725b3 100644 (file)
@@ -1279,6 +1279,8 @@ The functions are run with one arg, the frame to be deleted.  */)
 
   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))
index 82be739b9d9310314e9462b034ef0b51f56c782e..ec1500349ea0912c6a32482b6945e5403dc024d1 100644 (file)
@@ -4212,9 +4212,6 @@ If DISPLAY is nil, that stands for the selected frame's display.  */)
   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);
       }
 
index 9189d6a0d2a94eba33947c2943f26e319495c82a..c563757e63b82983a8da293f1b30fa49656dc60d 100644 (file)
@@ -10649,6 +10649,8 @@ void
 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 @@ x_delete_display (dpyinfo)
     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);