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
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 @@
 	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 @@
 		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)