From: Michel Dänzer <michel.daen...@amd.com>

We were leaking it.

Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
---
 src/amdgpu_kms.c   | 19 +++++++++++++------
 src/amdgpu_probe.c |  6 ++++--
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 44a99b564..7d582095b 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -116,16 +116,24 @@ static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
        DevUnion *pPriv;
        AMDGPUEntPtr pAMDGPUEnt;
        AMDGPUInfoPtr info;
+       EntityInfoPtr pEnt;
 
        if (!pScrn)
                return;
 
        info = AMDGPUPTR(pScrn);
-       if (info && info->fbcon_pixmap)
-               pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
+       if (info) {
+               if (info->fbcon_pixmap)
+                       pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
 
-       pPriv = 
xf86GetEntityPrivate(xf86GetEntityInfo(pScrn->entityList[pScrn->numEntities - 
1])->index,
-                                    gAMDGPUEntityIndex);
+               pEnt = info->pEnt;
+               free(pScrn->driverPrivate);
+               pScrn->driverPrivate = NULL;
+       } else {
+               pEnt = xf86GetEntityInfo(pScrn->entityList[pScrn->numEntities - 
1]);
+       }
+
+       pPriv = xf86GetEntityPrivate(pEnt->index, gAMDGPUEntityIndex);
        pAMDGPUEnt = pPriv->ptr;
        if (pAMDGPUEnt->fd > 0) {
                DevUnion *pPriv;
@@ -143,8 +151,7 @@ static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
                }
        }
 
-       free(pScrn->driverPrivate);
-       pScrn->driverPrivate = NULL;
+       free(pEnt);
 }
 
 static void *amdgpuShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset,
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index e446539d6..021706088 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -177,7 +177,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct 
pci_device *pci_dev)
 {
        ScrnInfoPtr pScrn = NULL;
        char *busid;
-       EntityInfoPtr pEnt;
+       EntityInfoPtr pEnt = NULL;
        DevUnion *pPriv;
        AMDGPUEntPtr pAMDGPUEnt;
 
@@ -256,6 +256,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct 
pci_device *pci_dev)
 error_amdgpu:
        amdgpu_kernel_close_fd(pAMDGPUEnt);
 error:
+       free(pEnt);
        free(busid);
        return FALSE;
 }
@@ -294,7 +295,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
        ScrnInfoPtr pScrn;
        int scr_flags = 0;
        char *busid;
-       EntityInfoPtr pEnt;
+       EntityInfoPtr pEnt = NULL;
        DevUnion *pPriv;
        AMDGPUEntPtr pAMDGPUEnt;
 
@@ -379,6 +380,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 error_amdgpu:
        amdgpu_kernel_close_fd(pAMDGPUEnt);
 error:
+       free(pEnt);
        free(busid);
        return FALSE;
 }
-- 
2.14.2

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to