diff options
author | Dave Barnish <dave.barnish@arm.com> | 2013-11-14 08:52:10 +0000 |
---|---|---|
committer | Dave Barnish <dave.barnish@arm.com> | 2013-11-21 16:10:25 +0000 |
commit | caed3a1952bb92723aa61c361f4f57709fef740f (patch) | |
tree | 2dd43e0b412df425f3f6699f763697393391d5e5 | |
parent | 3be1f6273441fe95dd442f44064387322e16b7e9 (diff) |
Fix leaks in ARMSOCCloseScreen
Call the hardware cursor cleanup on close screen.
Destroy the root pixmap in close screen
(based on a change in https://chromium-review.googlesource.com/#/c/167860/1)
Change-Id: I20987c9772bc5a3d9f44e976e57160ae428ec728
-rw-r--r-- | src/armsoc_driver.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/armsoc_driver.c b/src/armsoc_driver.c index 4fa87cc..fb995a5 100644 --- a/src/armsoc_driver.c +++ b/src/armsoc_driver.c @@ -1218,6 +1218,17 @@ ARMSOCCloseScreen(CLOSE_SCREEN_ARGS_DECL) TRACE_ENTER(); drmmode_screen_fini(pScrn); + drmmode_cursor_fini(pScreen); + + /* pScreen->devPrivate holds the root pixmap created around our bo by miCreateResources which is installed + * by fbScreenInit() when called from ARMSOCScreenInit(). + * This pixmap should be destroyed in miScreenClose() but this isn't wrapped by fbScreenInit() so to prevent a leak + * we do it here, before calling the CloseScreen chain which would just free pScreen->devPrivate in fbCloseScreen() + */ + if (pScreen->devPrivate) { + (void) (*pScreen->DestroyPixmap)(pScreen->devPrivate); + pScreen->devPrivate = NULL; + } unwrap(pARMSOC, pScreen, CloseScreen); unwrap(pARMSOC, pScreen, BlockHandler); @@ -1232,9 +1243,9 @@ ARMSOCCloseScreen(CLOSE_SCREEN_ARGS_DECL) if (pARMSOC->pARMSOCEXA->CloseScreen) pARMSOC->pARMSOCEXA->CloseScreen(CLOSE_SCREEN_ARGS); - /* release the scanout buffer */ - armsoc_bo_unreference(pARMSOC->scanout); + /* scanout buffer is released when root pixmap is destroyed */ pARMSOC->scanout = NULL; + pScrn->displayWidth = 0; if (pScrn->vtSema == TRUE) |