]> diplodocus.org Git - xorg-xinput/commitdiff
Fix XRRCrtcInfo memory leaks
authorPeter Hutterer <peter.hutterer@who-t.net>
Wed, 8 Feb 2012 10:46:29 +0000 (20:46 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 8 Feb 2012 16:46:53 +0000 (02:46 +1000)
crtc_info isn't used until later, move down to the block it is used to avoid
leaking.

Reported-by: Aaron Plattner <aplattner@nvidia.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
src/transform.c

index cffc3afd089710f00cfc5376189c1e0f59162941..6a31c83e599e15569212bdff8ae87e7c953a7395 100644 (file)
@@ -142,7 +142,6 @@ map_output_xrandr(Display *dpy, int deviceid, const char *output_name)
     int rc = EXIT_FAILURE;
     XRRScreenResources *res;
     XRROutputInfo *output_info;
     int rc = EXIT_FAILURE;
     XRRScreenResources *res;
     XRROutputInfo *output_info;
-    XRRCrtcInfo *crtc_info;
 
     res = XRRGetScreenResources(dpy, DefaultRootWindow(dpy));
 
 
     res = XRRGetScreenResources(dpy, DefaultRootWindow(dpy));
 
@@ -152,7 +151,6 @@ map_output_xrandr(Display *dpy, int deviceid, const char *output_name)
         if (!output_info->crtc || output_info->connection != RR_Connected)
             continue;
 
         if (!output_info->crtc || output_info->connection != RR_Connected)
             continue;
 
-        crtc_info = XRRGetCrtcInfo (dpy, res, output_info->crtc);
         if (strcmp(output_info->name, output_name) == 0)
         {
             found = 1;
         if (strcmp(output_info->name, output_name) == 0)
         {
             found = 1;
@@ -163,11 +161,14 @@ map_output_xrandr(Display *dpy, int deviceid, const char *output_name)
     /* crtc holds our screen info, need to compare to actual screen size */
     if (found)
     {
     /* crtc holds our screen info, need to compare to actual screen size */
     if (found)
     {
+        XRRCrtcInfo *crtc_info;
         Matrix m;
         matrix_set_unity(&m);
         Matrix m;
         matrix_set_unity(&m);
+        crtc_info = XRRGetCrtcInfo (dpy, res, output_info->crtc);
         set_transformation_matrix(dpy, &m, crtc_info->x, crtc_info->y,
                                   crtc_info->width, crtc_info->height);
         rc = apply_matrix(dpy, deviceid, &m);
         set_transformation_matrix(dpy, &m, crtc_info->x, crtc_info->y,
                                   crtc_info->width, crtc_info->height);
         rc = apply_matrix(dpy, deviceid, &m);
+        XRRFreeCrtcInfo(crtc_info);
     } else
         printf("Unable to find output '%s'. "
                 "Output may not be connected.\n", output_name);
     } else
         printf("Unable to find output '%s'. "
                 "Output may not be connected.\n", output_name);