Mesa (gallium-0.2): g3dvl: Fix some memory leaks.

Younes Manton ymanton at kemper.freedesktop.org
Sat Jan 10 19:12:20 UTC 2009


Module: Mesa
Branch: gallium-0.2
Commit: c10db52fcdaf1e21699fa681b701f224b1410990
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c10db52fcdaf1e21699fa681b701f224b1410990

Author: Younes Manton <younes.m at gmail.com>
Date:   Thu Dec 11 23:04:51 2008 -0500

g3dvl: Fix some memory leaks.

---

 src/driclient/src/driclient.c |   15 +++++++++++++++
 src/libXvMC/context.c         |    6 ++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/src/driclient/src/driclient.c b/src/driclient/src/driclient.c
index 2d75141..dc2189a 100644
--- a/src/driclient/src/driclient.c
+++ b/src/driclient/src/driclient.c
@@ -111,8 +111,23 @@ free_screen:
 
 int driDestroyScreen(dri_screen_t *dri_screen)
 {
+	Drawable	draw;
+	dri_drawable_t	*dri_draw;
+
 	assert(dri_screen);
 
+	if (drmHashFirst(dri_screen->drawable_hash, &draw, (void**)&dri_draw))
+	{
+		dri_draw->refcount = 1;
+		driDestroyDrawable(dri_draw);
+
+		while (drmHashNext(dri_screen->drawable_hash, &draw, (void**)&dri_draw))
+		{
+			dri_draw->refcount = 1;
+			driDestroyDrawable(dri_draw);
+		}
+	}
+
 	drmHashDestroy(dri_screen->drawable_hash);
 	drmUnmap(dri_screen->sarea, SAREA_MAX);
 	drmCloseOnce(dri_screen->fd);
diff --git a/src/libXvMC/context.c b/src/libXvMC/context.c
index 698410d..273f658 100644
--- a/src/libXvMC/context.c
+++ b/src/libXvMC/context.c
@@ -182,6 +182,8 @@ Status XvMCCreateContext(Display *display, XvPortID port, int surface_type_id, i
 Status XvMCDestroyContext(Display *display, XvMCContext *context)
 {
 	struct vlContext	*vl_ctx;
+	struct vlScreen		*vl_screen;
+	struct vlDisplay	*vl_dpy;
 	struct pipe_context	*pipe;
 
 	assert(display);
@@ -194,7 +196,11 @@ Status XvMCDestroyContext(Display *display, XvMCContext *context)
 	assert(display == vlGetNativeDisplay(vlGetDisplay(vlContextGetScreen(vl_ctx))));
 
 	pipe = vlGetPipeContext(vl_ctx);
+	vl_screen = vlContextGetScreen(vl_ctx);
+	vl_dpy = vlGetDisplay(vl_screen);
 	vlDestroyContext(vl_ctx);
+	vlDestroyScreen(vl_screen);
+	vlDestroyDisplay(vl_dpy);
 	destroy_pipe_context(pipe);
 
 	return Success;




More information about the mesa-commit mailing list