diff options
author | Younes Manton <younes.m@gmail.com> | 2008-12-11 23:04:51 -0500 |
---|---|---|
committer | Younes Manton <younes.m@gmail.com> | 2009-01-10 13:52:06 -0500 |
commit | c10db52fcdaf1e21699fa681b701f224b1410990 (patch) | |
tree | a38d77ea5c1d49639cfb5b9aefb241e286c370b0 /src | |
parent | 87e39466dc49e033c4075f99343856637611b438 (diff) |
g3dvl: Fix some memory leaks.
Diffstat (limited to 'src')
-rw-r--r-- | src/driclient/src/driclient.c | 15 | ||||
-rw-r--r-- | 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 2d7514166f..dc2189afec 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 698410d4c2..273f658029 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; |