g3dvl: Fix some memory leaks.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user