We now call XRRFreeScreenResources as soon as practical to allow the
now-following logic to return at its leisure. Additionally, we also
copy the data from 'crtc_info' locally and free it ASAP.
---
Changes from v1:
 * Free crtc_info

 tools/xsetwacom.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c
index 9d47ea6..dd0a3e5 100644
--- a/tools/xsetwacom.c
+++ b/tools/xsetwacom.c
@@ -2006,6 +2006,7 @@ static void _set_matrix(Display *dpy, XDevice *dev,
 static void set_output_xrandr(Display *dpy, XDevice *dev, param_t *param, int 
argc, char **argv)
 {
        int i, found = 0;
+       int x, y, width, height;
        char *output_name;
        XRRScreenResources *res;
        XRROutputInfo *output_info;
@@ -2014,7 +2015,6 @@ static void set_output_xrandr(Display *dpy, XDevice *dev, 
param_t *param, int ar
        output_name = argv[0];
 
        res = XRRGetScreenResources(dpy, DefaultRootWindow(dpy));
-
        for (i = 0; i < res->noutput && !found; i++)
        {
                output_info = XRRGetOutputInfo(dpy, res, res->outputs[i]);
@@ -2026,8 +2026,13 @@ static void set_output_xrandr(Display *dpy, XDevice 
*dev, param_t *param, int ar
                        continue;
 
                crtc_info = XRRGetCrtcInfo (dpy, res, output_info->crtc);
-               TRACE("CRTC (%dx%d) %dx%d\n", crtc_info->x, crtc_info->y,
-                       crtc_info->width, crtc_info->height);
+               x = crtc_info->x;
+               y = crtc_info->y;
+               width = crtc_info->width;
+               height = crtc_info->height;
+               XRRFreeCrtcInfo(crtc_info);
+
+               TRACE("CRTC (%dx%d) %dx%d\n", x, y, width, height);
 
                if (strcmp(output_info->name, output_name) == 0)
                {
@@ -2035,6 +2040,7 @@ static void set_output_xrandr(Display *dpy, XDevice *dev, 
param_t *param, int ar
                        break;
                }
        }
+       XRRFreeScreenResources(res);
 
        /* crtc holds our screen info, need to compare to actual screen size */
        if (found)
@@ -2046,7 +2052,6 @@ static void set_output_xrandr(Display *dpy, XDevice *dev, 
param_t *param, int ar
                printf("Unable to find output '%s'. "
                        "Output may not be connected.\n", output_name);
 
-       XRRFreeScreenResources(res);
 }
 
 /**
-- 
1.7.6


------------------------------------------------------------------------------
Get a FREE DOWNLOAD! and learn more about uberSVN rich system, 
user administration capabilities and model configuration. Take 
the hassle out of deploying and managing Subversion and the 
tools developers use with it. http://p.sf.net/sfu/wandisco-d2d-2
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to