summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Davy <[email protected]>2015-01-24 17:58:28 +0100
committerAxel Davy <[email protected]>2015-02-06 00:07:20 +0100
commit90585cbc9aef27904efc86dbfbd8743d27a6f599 (patch)
treeae8b0f9bb6fa90d60a94aeabd3bd11cf808818cd
parent8b3a9d5c9f54a0c1b1e95cc61214fd69c6777680 (diff)
gallium/targets/d3dadapter9: Free card device
The drm fd wasn't released, causing a crash for wine tests on nouveau, which seems to have a bug when a lot of device descriptors are open. Reviewed-by: Tiziano Bacocco <[email protected]> Signed-off-by: Axel Davy <[email protected]>
-rw-r--r--src/gallium/targets/d3dadapter9/drm.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/gallium/targets/d3dadapter9/drm.c b/src/gallium/targets/d3dadapter9/drm.c
index f054654d96e..cb0c48f12bb 100644
--- a/src/gallium/targets/d3dadapter9/drm.c
+++ b/src/gallium/targets/d3dadapter9/drm.c
@@ -74,27 +74,28 @@ struct d3dadapter9drm_context
{
struct d3dadapter9_context base;
struct pipe_loader_device *dev, *swdev;
+ int fd;
};
static void
drm_destroy( struct d3dadapter9_context *ctx )
{
+ struct d3dadapter9drm_context *drm = (struct d3dadapter9drm_context *)ctx;
+
if (ctx->ref)
ctx->ref->destroy(ctx->ref);
/* because ref is a wrapper around hal, freeing ref frees hal too. */
else if (ctx->hal)
ctx->hal->destroy(ctx->hal);
-#if !GALLIUM_STATIC_TARGETS
- {
- struct d3dadapter9drm_context *drm = (struct d3dadapter9drm_context *)ctx;
- if (drm->swdev)
- pipe_loader_release(&drm->swdev, 1);
- if (drm->dev)
- pipe_loader_release(&drm->dev, 1);
- }
+#if !GALLIUM_STATIC_TARGETS
+ if (drm->swdev)
+ pipe_loader_release(&drm->swdev, 1);
+ if (drm->dev)
+ pipe_loader_release(&drm->dev, 1);
#endif
+ close(drm->fd);
FREE(ctx);
}
@@ -235,6 +236,7 @@ drm_create_adapter( int fd,
ctx->base.destroy = drm_destroy;
fd = loader_get_user_preferred_fd(fd, &different_device);
+ ctx->fd = fd;
ctx->base.linear_framebuffer = !!different_device;
#if GALLIUM_STATIC_TARGETS