[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r113655: Fix X GC leak in GTK and raw (no toolkit) X
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] trunk r113655: Fix X GC leak in GTK and raw (no toolkit) X ports. |
Date: |
Fri, 02 Aug 2013 13:22:54 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 113655
revision-id: address@hidden
parent: address@hidden
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Fri 2013-08-02 17:22:23 +0400
message:
Fix X GC leak in GTK and raw (no toolkit) X ports.
* xterm.c (x_free_frame_resources): If white and black relief
GCs are allocated, always free them here.
* xfns.c (x_make_gc): Omit redundant initialization.
* widget.c (create_frame_gcs): Remove the leftover.
(EmacsFrameDestroy): Do nothing because all GCs are now freed
in x_free_frame_resources.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/widget.c widget.c-20091113204419-o5vbwnq5f7feedwu-676
src/xfns.c xfns.c-20091113204419-o5vbwnq5f7feedwu-274
src/xterm.c xterm.c-20091113204419-o5vbwnq5f7feedwu-244
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-08-02 09:42:23 +0000
+++ b/src/ChangeLog 2013-08-02 13:22:23 +0000
@@ -1,3 +1,13 @@
+2013-08-02 Dmitry Antipov <address@hidden>
+
+ Fix X GC leak in GTK and raw (no toolkit) X ports.
+ * xterm.c (x_free_frame_resources): If white and black relief
+ GCs are allocated, always free them here.
+ * xfns.c (x_make_gc): Omit redundant initialization.
+ * widget.c (create_frame_gcs): Remove the leftover.
+ (EmacsFrameDestroy): Do nothing because all GCs are now freed
+ in x_free_frame_resources.
+
2013-08-02 Jan Djärv <address@hidden>
* nsterm.m (windowWillResize:toSize:): Only change title if
=== modified file 'src/widget.c'
--- a/src/widget.c 2013-06-30 16:14:22 +0000
+++ b/src/widget.c 2013-08-02 13:22:23 +0000
@@ -503,26 +503,6 @@
update_wm_hints (ew);
}
-
-#if 0
-
-static void
-create_frame_gcs (EmacsFrame ew)
-{
- struct frame *s = ew->emacs_frame.frame;
-
- s->output_data.x->normal_gc
- = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), 0, 0);
- s->output_data.x->reverse_gc
- = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), 0, 0);
- s->output_data.x->cursor_gc
- = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), 0, 0);
- s->output_data.x->black_relief.gc = 0;
- s->output_data.x->white_relief.gc = 0;
-}
-
-#endif /* 0 */
-
static char setup_frame_cursor_bits[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -683,19 +663,7 @@
static void
EmacsFrameDestroy (Widget widget)
{
- EmacsFrame ew = (EmacsFrame) widget;
- struct frame* s = ew->emacs_frame.frame;
-
- if (! s) emacs_abort ();
- if (! s->output_data.x) emacs_abort ();
-
- block_input ();
- x_free_gcs (s);
- if (s->output_data.x->white_relief.gc)
- XFreeGC (XtDisplay (widget), s->output_data.x->white_relief.gc);
- if (s->output_data.x->black_relief.gc)
- XFreeGC (XtDisplay (widget), s->output_data.x->black_relief.gc);
- unblock_input ();
+ /* All GCs are now freed in x_free_frame_resources. */
}
static void
=== modified file 'src/xfns.c'
--- a/src/xfns.c 2013-08-02 03:55:24 +0000
+++ b/src/xfns.c 2013-08-02 13:22:23 +0000
@@ -2788,10 +2788,6 @@
| GCFillStyle | GCLineWidth),
&gc_values);
- /* Reliefs. */
- f->output_data.x->white_relief.gc = 0;
- f->output_data.x->black_relief.gc = 0;
-
/* Create the gray border tile used when the pointer is not in
the frame. Since this depends on the frame's pixel values,
this must be done on a per-frame basis. */
=== modified file 'src/xterm.c'
--- a/src/xterm.c 2013-08-01 07:33:58 +0000
+++ b/src/xterm.c 2013-08-02 13:22:23 +0000
@@ -9439,6 +9439,19 @@
unload_color (f, f->output_data.x->black_relief.pixel);
x_free_gcs (f);
+
+ /* Free extra GCs allocated by x_setup_relief_colors. */
+ if (f->output_data.x->white_relief.gc)
+ {
+ XFreeGC (dpyinfo->display, f->output_data.x->white_relief.gc);
+ f->output_data.x->white_relief.gc = 0;
+ }
+ if (f->output_data.x->black_relief.gc)
+ {
+ XFreeGC (dpyinfo->display, f->output_data.x->black_relief.gc);
+ f->output_data.x->black_relief.gc = 0;
+ }
+
XFlush (FRAME_X_DISPLAY (f));
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r113655: Fix X GC leak in GTK and raw (no toolkit) X ports.,
Dmitry Antipov <=