From e5b5297ac449fb4ac62cc6471f933ae2265778a2 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Tue, 26 Mar 2013 15:19:33 +0100 Subject: modesetting: clean up leaks Signed-off-by: Maarten Lankhorst --- src/driver.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/driver.c b/src/driver.c index 87ba272..06d6d53 100644 --- a/src/driver.c +++ b/src/driver.c @@ -206,7 +206,7 @@ static Bool probe_hw(char *dev) int fd = open_hw(dev); if (fd != -1) { close(fd); - return TRUE; + return TRUE; } return FALSE; } @@ -530,15 +530,27 @@ static void msBlockHandler(BLOCKHANDLER_ARGS_DECL) static void FreeRec(ScrnInfoPtr pScrn) { + modesettingPtr ms; + if (!pScrn) - return; + return; - if (!pScrn->driverPrivate) - return; + ms = modesettingPTR(pScrn); + if (!ms) + return; + pScrn->driverPrivate = NULL; - free(pScrn->driverPrivate); + if (ms->fd > 0) { + int ret; + + if (ms->pEnt->location.type == BUS_PCI) + ret = drmClose(ms->fd); + else + ret = close(ms->fd); + } + free(ms->Options); + free(ms); - pScrn->driverPrivate = NULL; } static Bool @@ -596,8 +608,8 @@ PreInit(ScrnInfoPtr pScrn, int flags) #if XSERVER_PLATFORM_BUS if (pEnt->location.type == BUS_PLATFORM) { - char *path = xf86_get_platform_device_attrib(pEnt->location.id.plat, ODEV_ATTRIB_PATH); - ms->fd = open_hw(path); + char *path = xf86_get_platform_device_attrib(pEnt->location.id.plat, ODEV_ATTRIB_PATH); + ms->fd = open_hw(path); } else #endif -- cgit v1.2.3