From: Michel Dänzer <michel.daenzer@xxxxxxx> We were leaking it. Signed-off-by: Michel Dänzer <michel.daenzer at 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