diff mbox

[RESEND,libdrm] tests: fix memory leak issue

Message ID 1521517653-4310-1-git-send-email-inki.dae@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Inki Dae March 20, 2018, 3:47 a.m. UTC
Fixed memory leak issue to drmModeRes and drmModePlaneRes objects.

These objects were allocated by drmModeGetResources and
drmModeGetPlaneResources functions but not freed properly.

So this patch frees them by calling drmModeFreeResources
drmModeFreePlaneResources functions at failure case.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
---
 tests/kms/libkms-test-device.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Eric Engestrom March 20, 2018, 2:17 p.m. UTC | #1
On Tuesday, 2018-03-20 12:47:33 +0900, Inki Dae wrote:
> Fixed memory leak issue to drmModeRes and drmModePlaneRes objects.
> 
> These objects were allocated by drmModeGetResources and
> drmModeGetPlaneResources functions but not freed properly.
> 
> So this patch frees them by calling drmModeFreeResources
> drmModeFreePlaneResources functions at failure case.
> 
> Signed-off-by: Inki Dae <inki.dae@samsung.com>

Good catch, thanks!
R-b and pushed, since I'm not sure you have commit access on libdrm :)

> ---
>  tests/kms/libkms-test-device.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/kms/libkms-test-device.c b/tests/kms/libkms-test-device.c
> index 53c7349..042ae05 100644
> --- a/tests/kms/libkms-test-device.c
> +++ b/tests/kms/libkms-test-device.c
> @@ -67,7 +67,7 @@ static void kms_device_probe_screens(struct kms_device *device)
>  
>  	device->screens = calloc(res->count_connectors, sizeof(screen));
>  	if (!device->screens)
> -		return;
> +		goto err_free_resources;
>  
>  	for (i = 0; i < res->count_connectors; i++) {
>  		unsigned int *count;
> @@ -97,6 +97,7 @@ static void kms_device_probe_screens(struct kms_device *device)
>  		device->num_screens++;
>  	}
>  
> +err_free_resources:
>  	drmModeFreeResources(res);
>  }
>  
> @@ -112,7 +113,7 @@ static void kms_device_probe_crtcs(struct kms_device *device)
>  
>  	device->crtcs = calloc(res->count_crtcs, sizeof(crtc));
>  	if (!device->crtcs)
> -		return;
> +		goto err_free_resources;
>  
>  	for (i = 0; i < res->count_crtcs; i++) {
>  		crtc = kms_crtc_create(device, res->crtcs[i]);
> @@ -123,6 +124,7 @@ static void kms_device_probe_crtcs(struct kms_device *device)
>  		device->num_crtcs++;
>  	}
>  
> +err_free_resources:
>  	drmModeFreeResources(res);
>  }
>  
> @@ -138,7 +140,7 @@ static void kms_device_probe_planes(struct kms_device *device)
>  
>  	device->planes = calloc(res->count_planes, sizeof(plane));
>  	if (!device->planes)
> -		return;
> +		goto err_free_resources;
>  
>  	for (i = 0; i < res->count_planes; i++) {
>  		plane = kms_plane_create(device, res->planes[i]);
> @@ -149,6 +151,7 @@ static void kms_device_probe_planes(struct kms_device *device)
>  		device->num_planes++;
>  	}
>  
> +err_free_resources:
>  	drmModeFreePlaneResources(res);
>  }
>  
> -- 
> 1.9.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox

Patch

diff --git a/tests/kms/libkms-test-device.c b/tests/kms/libkms-test-device.c
index 53c7349..042ae05 100644
--- a/tests/kms/libkms-test-device.c
+++ b/tests/kms/libkms-test-device.c
@@ -67,7 +67,7 @@  static void kms_device_probe_screens(struct kms_device *device)
 
 	device->screens = calloc(res->count_connectors, sizeof(screen));
 	if (!device->screens)
-		return;
+		goto err_free_resources;
 
 	for (i = 0; i < res->count_connectors; i++) {
 		unsigned int *count;
@@ -97,6 +97,7 @@  static void kms_device_probe_screens(struct kms_device *device)
 		device->num_screens++;
 	}
 
+err_free_resources:
 	drmModeFreeResources(res);
 }
 
@@ -112,7 +113,7 @@  static void kms_device_probe_crtcs(struct kms_device *device)
 
 	device->crtcs = calloc(res->count_crtcs, sizeof(crtc));
 	if (!device->crtcs)
-		return;
+		goto err_free_resources;
 
 	for (i = 0; i < res->count_crtcs; i++) {
 		crtc = kms_crtc_create(device, res->crtcs[i]);
@@ -123,6 +124,7 @@  static void kms_device_probe_crtcs(struct kms_device *device)
 		device->num_crtcs++;
 	}
 
+err_free_resources:
 	drmModeFreeResources(res);
 }
 
@@ -138,7 +140,7 @@  static void kms_device_probe_planes(struct kms_device *device)
 
 	device->planes = calloc(res->count_planes, sizeof(plane));
 	if (!device->planes)
-		return;
+		goto err_free_resources;
 
 	for (i = 0; i < res->count_planes; i++) {
 		plane = kms_plane_create(device, res->planes[i]);
@@ -149,6 +151,7 @@  static void kms_device_probe_planes(struct kms_device *device)
 		device->num_planes++;
 	}
 
+err_free_resources:
 	drmModeFreePlaneResources(res);
 }