summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2010-07-01 09:56:40 -0400
committerChris Wilson <chris@chris-wilson.co.uk>2010-07-12 17:40:55 +0100
commite30f0338fbf894fa3fdab20f4f9a97495cd341da (patch)
tree994fe98661d46c08873e7ed284f4bc234515a515
parent6e08b0f48f0d6ddaca963de6f4fd3b56f32512c6 (diff)
Destroy screen pixmap on screen close.
This avoids a memory leak on server reset. Signed-off-by: Keith Packard <keithp@keithp.com> [ickle: Added comments from Keith that explain the necessity of destroying the pixmap ourselves and why chaining up in this instance is not the correct approach.] Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--uxa/uxa.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/uxa/uxa.c b/uxa/uxa.c
index 2321a7f3..4a5907e8 100644
--- a/uxa/uxa.c
+++ b/uxa/uxa.c
@@ -1,7 +1,7 @@
/*
- * Copyright © 2001 Keith Packard
+ * Copyright © 2001 Keith Packard
*
- * Partly based on code that is Copyright © The XFree86 Project Inc.
+ * Partly based on code that is Copyright © The XFree86 Project Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -385,6 +385,13 @@ static Bool uxa_close_screen(int i, ScreenPtr pScreen)
uxa_glyphs_fini(pScreen);
+ /* Destroy the pixmap created by miScreenInit() *before* chaining up as
+ * we finalize ourselves here and so this is the last chance we have of
+ * releasing our resources associated with the Pixmap. So do it first.
+ */
+ (void) (*pScreen->DestroyPixmap) (pScreen->devPrivate);
+ pScreen->devPrivate = NULL;
+
pScreen->CreateGC = uxa_screen->SavedCreateGC;
pScreen->CloseScreen = uxa_screen->SavedCloseScreen;
pScreen->GetImage = uxa_screen->SavedGetImage;