]> git.eshelyaron.com Git - emacs.git/commitdiff
Backport: Plug memory leak in GTK x-display-monitor-attributes-list
authorAlexander Gramiak <agrambot@gmail.com>
Sun, 7 Apr 2019 05:02:24 +0000 (23:02 -0600)
committerAlexander Gramiak <agrambot@gmail.com>
Sun, 14 Apr 2019 21:59:39 +0000 (15:59 -0600)
* 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.

src/frame.c
src/xfns.c

index 9c3ff72271addd66dae41d199435a5bf6d72f370..4ed140d7d084f1947bae67548a22c3a00ce7e3e6 100644 (file)
@@ -5533,8 +5533,8 @@ selected frame.  This is useful when `make-pointer-invisible' is set.  */)
 
 #ifdef HAVE_WINDOW_SYSTEM
 
-# if (defined HAVE_NS \
-      || (!defined USE_GTK && (defined HAVE_XINERAMA || defined HAVE_XRANDR)))
+# if (defined USE_GTK || defined HAVE_NS || defined HAVE_XINERAMA \
+      || defined HAVE_XRANDR)
 void
 free_monitors (struct MonitorInfo *monitors, int n_monitors)
 {
index 732bc87814a6986e940881586c2b7db4fbae0f00..b53999aaadffba76e485b3a254781d2a20ecf3db 100644 (file)
@@ -5009,7 +5009,7 @@ Internal use only, use `display-monitor-attributes-list' instead.  */)
       mi->mm_height = height_mm;
 
 #if GTK_CHECK_VERSION (3, 22, 0)
-      mi->name = g_strdup (gdk_monitor_get_model (monitor));
+      dupstring (&mi->name, (gdk_monitor_get_model (monitor)));
 #elif GTK_CHECK_VERSION (2, 14, 0)
       mi->name = gdk_screen_get_monitor_plug_name (gscreen, i);
 #endif
@@ -5020,6 +5020,11 @@ Internal use only, use `display-monitor-attributes-list' instead.  */)
                                                  primary_monitor,
                                                  monitor_frames,
                                                  source);
+#if GTK_CHECK_VERSION (2, 14, 0)
+  free_monitors (monitors, n_monitors);
+#else
+  xfree (monitors);
+#endif
   unblock_input ();
 #else  /* not USE_GTK */