diff options
| author | Alexander Gramiak | 2019-04-06 23:02:24 -0600 |
|---|---|---|
| committer | Alexander Gramiak | 2019-04-14 15:59:39 -0600 |
| commit | b3cab4199a46b30539a24fb4d4b53ccdf488253e (patch) | |
| tree | 8acce7bbab946f4f4f44d978ea04959dcadf80ff /src | |
| parent | e40f39bec34feeec893fb66625f19cc4663cd217 (diff) | |
| download | emacs-b3cab4199a46b30539a24fb4d4b53ccdf488253e.tar.gz emacs-b3cab4199a46b30539a24fb4d4b53ccdf488253e.zip | |
Backport: Plug memory leak in GTK x-display-monitor-attributes-list
* src/frame.c (free_monitors) [USE_GTK]: Define in the GTK case as
well.
* src/xfns.c (x-display-monitor-attributes-list) [USE_GTK]: Plug
memory leak. Use dupstring over xstrdup as gdk_monitor_get_model may
return NULL.
Diffstat (limited to 'src')
| -rw-r--r-- | src/frame.c | 4 | ||||
| -rw-r--r-- | src/xfns.c | 7 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/frame.c b/src/frame.c index 9c3ff72271a..4ed140d7d08 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -5533,8 +5533,8 @@ selected frame. This is useful when `make-pointer-invisible' is set. */) | |||
| 5533 | 5533 | ||
| 5534 | #ifdef HAVE_WINDOW_SYSTEM | 5534 | #ifdef HAVE_WINDOW_SYSTEM |
| 5535 | 5535 | ||
| 5536 | # if (defined HAVE_NS \ | 5536 | # if (defined USE_GTK || defined HAVE_NS || defined HAVE_XINERAMA \ |
| 5537 | || (!defined USE_GTK && (defined HAVE_XINERAMA || defined HAVE_XRANDR))) | 5537 | || defined HAVE_XRANDR) |
| 5538 | void | 5538 | void |
| 5539 | free_monitors (struct MonitorInfo *monitors, int n_monitors) | 5539 | free_monitors (struct MonitorInfo *monitors, int n_monitors) |
| 5540 | { | 5540 | { |
diff --git a/src/xfns.c b/src/xfns.c index 732bc87814a..b53999aaadf 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -5009,7 +5009,7 @@ Internal use only, use `display-monitor-attributes-list' instead. */) | |||
| 5009 | mi->mm_height = height_mm; | 5009 | mi->mm_height = height_mm; |
| 5010 | 5010 | ||
| 5011 | #if GTK_CHECK_VERSION (3, 22, 0) | 5011 | #if GTK_CHECK_VERSION (3, 22, 0) |
| 5012 | mi->name = g_strdup (gdk_monitor_get_model (monitor)); | 5012 | dupstring (&mi->name, (gdk_monitor_get_model (monitor))); |
| 5013 | #elif GTK_CHECK_VERSION (2, 14, 0) | 5013 | #elif GTK_CHECK_VERSION (2, 14, 0) |
| 5014 | mi->name = gdk_screen_get_monitor_plug_name (gscreen, i); | 5014 | mi->name = gdk_screen_get_monitor_plug_name (gscreen, i); |
| 5015 | #endif | 5015 | #endif |
| @@ -5020,6 +5020,11 @@ Internal use only, use `display-monitor-attributes-list' instead. */) | |||
| 5020 | primary_monitor, | 5020 | primary_monitor, |
| 5021 | monitor_frames, | 5021 | monitor_frames, |
| 5022 | source); | 5022 | source); |
| 5023 | #if GTK_CHECK_VERSION (2, 14, 0) | ||
| 5024 | free_monitors (monitors, n_monitors); | ||
| 5025 | #else | ||
| 5026 | xfree (monitors); | ||
| 5027 | #endif | ||
| 5023 | unblock_input (); | 5028 | unblock_input (); |
| 5024 | #else /* not USE_GTK */ | 5029 | #else /* not USE_GTK */ |
| 5025 | 5030 | ||