[PATCH 9/9] Add two FIXMEs for some remaining memleaks

Peter Hutterer peter.hutterer at who-t.net
Mon Feb 27 16:41:06 PST 2012


Two independent issues:
fb overwrites CloseScreen unconditionally, leaving any work otherwise
performed by miCloseScreen hanging. That doesn't matter as much since all
that does is free the pixmap (which gets freed by fbDestroyPixmap anyway).

But, since miScreenInit also unconditionally inits the SHM privates and
overwrites CloseScreen, these privates are never cleaned up.

The correct fix will likely be something that calls both miCloseScreen and
then down into ShmCloseScreen.

==16606== 72 bytes in 3 blocks are definitely lost in loss record 34 of 57
==16606==    at 0x4A05BB4: calloc (vg_replace_malloc.c:467)
==16606==    by 0x4BB1B1: ShmInitScreenPriv (shm.c:225)
==16606==    by 0x4BB2BE: ShmRegisterFuncs (shm.c:257)
==16606==    by 0x4BB3B6: ShmRegisterFbFuncs (shm.c:285)
==16606==    by 0x5C6017: miScreenInit (miscrinit.c:243)
==16606==    by 0x48C114: fbFinishScreenInit (fbscreen.c:254)
==16606==    by 0x48C232: fbScreenInit (fbscreen.c:309)
==16606==    by 0x41C35F: vfbScreenInit (InitOutput.c:875)
==16606==    by 0x433FA6: AddScreen (dispatch.c:3909)
==16606==    by 0x41C62B: InitOutput (InitOutput.c:967)
==16606==    by 0x5ACB18: main (main.c:204)

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 fb/fbscreen.c  |    3 ++-
 mi/miscrinit.c |    1 +
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/fb/fbscreen.c b/fb/fbscreen.c
index 9e6ecf5..daed2f8 100644
--- a/fb/fbscreen.c
+++ b/fb/fbscreen.c
@@ -226,7 +226,8 @@ fbFinishScreenInit(ScreenPtr	pScreen,
 			rootdepth, ndepths, depths,
 			defaultVisual, nvisuals, visuals))
 	return FALSE;
-    /* overwrite miCloseScreen with our own */
+    /* overwrite miCloseScreen with our own
+     * FIXME: leaking memory due to missing miCloseScreen cleanup */
     pScreen->CloseScreen = fbCloseScreen;
     if (bpp == 24 && imagebpp == 32)
     {
diff --git a/mi/miscrinit.c b/mi/miscrinit.c
index fb01c68..5e90fbe 100644
--- a/mi/miscrinit.c
+++ b/mi/miscrinit.c
@@ -242,6 +242,7 @@ miScreenInit(
 #ifdef MITSHM
 	ShmRegisterFbFuncs(pScreen);
 #endif
+	/* FIXME: this overwrites shm CloseScreen, leaving a memleak */
 	pScreen->CloseScreen = miCloseScreen;
     }
     /* else CloseScreen */
-- 
1.7.7.6



More information about the xorg-devel mailing list