diff options
author | Rob Clark <robdclark@gmail.com> | 2014-06-14 09:05:21 -0400 |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2014-06-20 06:24:41 -0400 |
commit | 228671402989ef47ca28df6621e94695e559fa24 (patch) | |
tree | b21ee4c78177ae4958110e40d3d888b88c8d4348 | |
parent | eacff99218c0f678cf49f072cd809fbd6cb537f7 (diff) |
cleanup better on exit
Don't leak drm fd.
Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r-- | src/msm-driver.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/msm-driver.c b/src/msm-driver.c index c2b5123..4461d27 100644 --- a/src/msm-driver.c +++ b/src/msm-driver.c @@ -129,6 +129,13 @@ static drmServerInfo drm_server_info = { dri_drm_get_perms, }; +static void +free_msm(MSMPtr pMsm) +{ + if (pMsm->drmFD) + drmClose(pMsm->drmFD); + free(pMsm); +} static Bool MSMInitDRM(ScrnInfoPtr pScrn) @@ -212,7 +219,7 @@ MSMPreInit(ScrnInfoPtr pScrn, int flags) pScrn->progClock = TRUE; pScrn->chipset = MSM_DRIVER_NAME; - INFO_MSG("MSM/Qualcomm processor (video memory: %dkB)", pScrn->videoRam / 1024); + INFO_MSG("MSM/Qualcomm processor"); if (!MSMInitDRM(pScrn)) { ERROR_MSG("Unable to open DRM"); @@ -236,7 +243,7 @@ MSMPreInit(ScrnInfoPtr pScrn, int flags) pMsm->options = malloc(sizeof(MSMOptions)); if (pMsm->options == NULL) { - free(pMsm); + free_msm(pMsm); return FALSE; } @@ -279,18 +286,18 @@ MSMPreInit(ScrnInfoPtr pScrn, int flags) xf86SetDpi(pScrn, 0, 0); if (!xf86SetWeight(pScrn, defaultWeight, defaultWeight)) { - free(pMsm); + free_msm(pMsm); return FALSE; } /* Initialize default visual */ if (!xf86SetDefaultVisual(pScrn, -1)) { - free(pMsm); + free_msm(pMsm); return FALSE; } if (!xf86SetGamma(pScrn, zeros)) { - free(pMsm); + free_msm(pMsm); return FALSE; } @@ -545,6 +552,14 @@ MSMLeaveVT(VT_FUNC_ARGS_DECL) } } +static void +MSMFreeScreen(FREE_SCREEN_ARGS_DECL) +{ + SCRN_INFO_PTR(arg); + MSMPtr pMsm = MSMPTR(pScrn); + free_msm(pMsm); +} + /* ------------------------------------------------------------ */ /* Following is the standard driver setup that probes for the */ /* hardware and sets up the structures. */ @@ -657,6 +672,7 @@ MSMProbe(DriverPtr drv, int flags) pScrn->SwitchMode = MSMSwitchMode; pScrn->EnterVT = MSMEnterVT; pScrn->LeaveVT = MSMLeaveVT; + pScrn->FreeScreen = MSMFreeScreen; } free(sections); |