Mesa (master): nouveau: fix winsys object leak
Ben Skeggs
darktama at kemper.freedesktop.org
Sun Jan 24 23:49:23 UTC 2010
Module: Mesa
Branch: master
Commit: 283b21d02bff3d4bd6127f6b642331e06db41ace
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=283b21d02bff3d4bd6127f6b642331e06db41ace
Author: Marcin Slusarz <marcin.slusarz at gmail.com>
Date: Sun Jan 17 23:50:50 2010 +0100
nouveau: fix winsys object leak
---
src/gallium/drivers/nouveau/nouveau_screen.c | 2 ++
.../winsys/drm/nouveau/drm/nouveau_drm_api.c | 9 +++++++++
2 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/src/gallium/drivers/nouveau/nouveau_screen.c b/src/gallium/drivers/nouveau/nouveau_screen.c
index 7ebc94e..1ad539d 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.c
+++ b/src/gallium/drivers/nouveau/nouveau_screen.c
@@ -260,6 +260,8 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
void
nouveau_screen_fini(struct nouveau_screen *screen)
{
+ struct pipe_winsys *ws = screen->base.winsys;
nouveau_channel_free(&screen->channel);
+ ws->destroy(ws);
}
diff --git a/src/gallium/winsys/drm/nouveau/drm/nouveau_drm_api.c b/src/gallium/winsys/drm/nouveau/drm/nouveau_drm_api.c
index c9f39d8..29afff6 100644
--- a/src/gallium/winsys/drm/nouveau/drm/nouveau_drm_api.c
+++ b/src/gallium/winsys/drm/nouveau/drm/nouveau_drm_api.c
@@ -54,6 +54,14 @@ static struct dri1_api nouveau_dri1_api = {
nouveau_dri1_front_surface,
};
+static void
+nouveau_drm_destroy_winsys(struct pipe_winsys *s)
+{
+ struct nouveau_winsys *nv_winsys = nouveau_winsys(s);
+ FREE(nv_winsys->pctx);
+ FREE(nv_winsys);
+}
+
static struct pipe_screen *
nouveau_drm_create_screen(struct drm_api *api, int fd,
struct drm_create_screen_arg *arg)
@@ -105,6 +113,7 @@ nouveau_drm_create_screen(struct drm_api *api, int fd,
return NULL;
}
ws = &nvws->base;
+ ws->destroy = nouveau_drm_destroy_winsys;
nvws->pscreen = init(ws, dev);
if (!nvws->pscreen) {
More information about the mesa-commit
mailing list