diff options
| author | Dmitry Antipov | 2013-08-02 17:22:23 +0400 |
|---|---|---|
| committer | Dmitry Antipov | 2013-08-02 17:22:23 +0400 |
| commit | 4b5c9326ce8f6b7856437cbbdbcccb415b38a5fc (patch) | |
| tree | 797f94ac354fa4eaa7d3b8dc43590fa7824ddf0d /src/widget.c | |
| parent | 26bb8a7ceb23a748e35afbc895b54e8c1322298f (diff) | |
| download | emacs-4b5c9326ce8f6b7856437cbbdbcccb415b38a5fc.tar.gz emacs-4b5c9326ce8f6b7856437cbbdbcccb415b38a5fc.zip | |
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.
Diffstat (limited to 'src/widget.c')
| -rw-r--r-- | src/widget.c | 34 |
1 files changed, 1 insertions, 33 deletions
diff --git a/src/widget.c b/src/widget.c index e2c8e9fa23f..f66ec0b80ec 100644 --- a/src/widget.c +++ b/src/widget.c | |||
| @@ -503,26 +503,6 @@ widget_update_wm_size_hints (Widget widget) | |||
| 503 | update_wm_hints (ew); | 503 | update_wm_hints (ew); |
| 504 | } | 504 | } |
| 505 | 505 | ||
| 506 | |||
| 507 | #if 0 | ||
| 508 | |||
| 509 | static void | ||
| 510 | create_frame_gcs (EmacsFrame ew) | ||
| 511 | { | ||
| 512 | struct frame *s = ew->emacs_frame.frame; | ||
| 513 | |||
| 514 | s->output_data.x->normal_gc | ||
| 515 | = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), 0, 0); | ||
| 516 | s->output_data.x->reverse_gc | ||
| 517 | = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), 0, 0); | ||
| 518 | s->output_data.x->cursor_gc | ||
| 519 | = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), 0, 0); | ||
| 520 | s->output_data.x->black_relief.gc = 0; | ||
| 521 | s->output_data.x->white_relief.gc = 0; | ||
| 522 | } | ||
| 523 | |||
| 524 | #endif /* 0 */ | ||
| 525 | |||
| 526 | static char setup_frame_cursor_bits[] = | 506 | static char setup_frame_cursor_bits[] = |
| 527 | { | 507 | { |
| 528 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 508 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| @@ -683,19 +663,7 @@ EmacsFrameRealize (Widget widget, XtValueMask *mask, XSetWindowAttributes *attrs | |||
| 683 | static void | 663 | static void |
| 684 | EmacsFrameDestroy (Widget widget) | 664 | EmacsFrameDestroy (Widget widget) |
| 685 | { | 665 | { |
| 686 | EmacsFrame ew = (EmacsFrame) widget; | 666 | /* All GCs are now freed in x_free_frame_resources. */ |
| 687 | struct frame* s = ew->emacs_frame.frame; | ||
| 688 | |||
| 689 | if (! s) emacs_abort (); | ||
| 690 | if (! s->output_data.x) emacs_abort (); | ||
| 691 | |||
| 692 | block_input (); | ||
| 693 | x_free_gcs (s); | ||
| 694 | if (s->output_data.x->white_relief.gc) | ||
| 695 | XFreeGC (XtDisplay (widget), s->output_data.x->white_relief.gc); | ||
| 696 | if (s->output_data.x->black_relief.gc) | ||
| 697 | XFreeGC (XtDisplay (widget), s->output_data.x->black_relief.gc); | ||
| 698 | unblock_input (); | ||
| 699 | } | 667 | } |
| 700 | 668 | ||
| 701 | static void | 669 | static void |