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.

Signed-off-by: Jason Gerecke <killert...@gmail.com>
---
Changes from v3:

 * Corresponds to patch v3 1/7
 * No changes.

 tools/xsetwacom.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c
index a0056a7..7c5a744 100644
--- a/tools/xsetwacom.c
+++ b/tools/xsetwacom.c
@@ -2005,6 +2005,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;
@@ -2013,7 +2014,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]);
@@ -2025,8 +2025,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)
                {
@@ -2034,18 +2039,17 @@ 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)
        {
                TRACE("Setting CRTC %s\n", output_name);
-               _set_matrix(dpy, dev, crtc_info->x, crtc_info->y,
-                           crtc_info->width, crtc_info->height);
+               _set_matrix(dpy, dev, x, y, width, height);
        } else
                printf("Unable to find output '%s'. "
                        "Output may not be connected.\n", output_name);
 
-       XRRFreeScreenResources(res);
 }
 
 /**
-- 
1.7.6


------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to