diff options
author | Qiang Yu | 2016-07-14 04:10:56 -0500 |
---|---|---|
committer | Emil Velikov | 2016-07-20 17:44:40 -0500 |
commit | 6c056eecd56374b069ed24c81f59b6638cde2f3a (patch) | |
tree | 67ffe92184b5a2451c81f5af9350a862831db3b2 | |
parent | 3c20893daa0a56b91869d806ae0d3a8d5d8b4cba (diff) | |
download | external-libgbm-6c056eecd56374b069ed24c81f59b6638cde2f3a.tar.gz external-libgbm-6c056eecd56374b069ed24c81f59b6638cde2f3a.tar.xz external-libgbm-6c056eecd56374b069ed24c81f59b6638cde2f3a.zip |
drm: fix drmFreeDevices memory leak on multi GPU setups
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>
-rw-r--r-- | xf86drm.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -2993,8 +2993,9 @@ void drmFreeDevices(drmDevicePtr devices[], int count) | |||
2993 | if (devices == NULL) | 2993 | if (devices == NULL) |
2994 | return; | 2994 | return; |
2995 | 2995 | ||
2996 | for (i = 0; i < count && devices[i] != NULL; i++) | 2996 | for (i = 0; i < count; i++) |
2997 | drmFreeDevice(&devices[i]); | 2997 | if (devices[i]) |
2998 | drmFreeDevice(&devices[i]); | ||
2998 | } | 2999 | } |
2999 | 3000 | ||
3000 | static int drmProcessPciDevice(drmDevicePtr *device, const char *d_name, | 3001 | static int drmProcessPciDevice(drmDevicePtr *device, const char *d_name, |