summaryrefslogtreecommitdiff
path: root/src/driclient/src
diff options
context:
space:
mode:
authorYounes Manton <younes.m@gmail.com>2008-12-11 23:04:51 -0500
committerYounes Manton <younes.m@gmail.com>2009-01-10 13:52:06 -0500
commitc10db52fcdaf1e21699fa681b701f224b1410990 (patch)
treea38d77ea5c1d49639cfb5b9aefb241e286c370b0 /src/driclient/src
parent87e39466dc49e033c4075f99343856637611b438 (diff)
g3dvl: Fix some memory leaks.
Diffstat (limited to 'src/driclient/src')
-rw-r--r--src/driclient/src/driclient.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/driclient/src/driclient.c b/src/driclient/src/driclient.c
index 2d7514166fa..dc2189afec3 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);