drm: fix drmFreeDevices memory leak on multi GPU setups
authorQiang Yu <Qiang.Yu@amd.com>
Thu, 14 Jul 2016 09:10:56 +0000 (17:10 +0800)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 20 Jul 2016 22:44:40 +0000 (23:44 +0100)
When in multi GPU case, devices array may have some
NULL "hole" in between two devices. So check all
array elements and free non-NULL device.

Signed-off-by: Qiang Yu <Qiang.Yu@amd.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
xf86drm.c

index 9bd82b2..9cfca49 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -2993,8 +2993,9 @@ void drmFreeDevices(drmDevicePtr devices[], int count)
     if (devices == NULL)
         return;
 
-    for (i = 0; i < count && devices[i] != NULL; i++)
-        drmFreeDevice(&devices[i]);
+    for (i = 0; i < count; i++)
+        if (devices[i])
+            drmFreeDevice(&devices[i]);
 }
 
 static int drmProcessPciDevice(drmDevicePtr *device, const char *d_name,