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 <[email protected]> --- Changes from v2: * Don't use crtc_info after free tools/xsetwacom.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c index 9d47ea6..7bc5b54 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,18 +2040,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 ------------------------------------------------------------------------------ Using storage to extend the benefits of virtualization and iSCSI Virtualization increases hardware utilization and delivers a new level of agility. Learn what those decisions are and how to modernize your storage and backup environments for virtualization. http://www.accelacomm.com/jaw/sfnl/114/51434361/ _______________________________________________ Linuxwacom-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
