Module: Mesa Branch: 10.5 Commit: 81a0920c3a1600d45a7a315de3ef654116bbbce0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=81a0920c3a1600d45a7a315de3ef654116bbbce0
Author: Mario Kleiner <[email protected]> Date: Sun Jun 28 03:02:31 2015 +0200 winsys/radeon: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads. Same problem and fix as for nouveau's ZaphodHeads trouble. See patch ... "nouveau: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads." ... for reference. Cc: "10.3 10.4 10.5 10.6" <[email protected]> Signed-off-by: Mario Kleiner <[email protected]> Reviewed-by: Marek Olšák <[email protected]> (cherry picked from commit 28dda47ae4d974e3e032d60e8e0965c8c068c6d8) --- src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c index 12c351d..674c60a 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c @@ -465,6 +465,10 @@ static void radeon_winsys_destroy(struct radeon_winsys *rws) if (ws->gen >= DRV_R600) { radeon_surface_manager_free(ws->surf_man); } + + if (ws->fd) + close(ws->fd); + FREE(rws); } @@ -666,7 +670,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create) return NULL; } - ws->fd = fd; + ws->fd = dup(fd); if (!do_winsys_init(ws)) goto fail; @@ -682,7 +686,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create) goto fail; if (ws->gen >= DRV_R600) { - ws->surf_man = radeon_surface_manager_new(fd); + ws->surf_man = radeon_surface_manager_new(ws->fd); if (!ws->surf_man) goto fail; } @@ -723,7 +727,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create) return NULL; } - util_hash_table_set(fd_tab, intptr_to_pointer(fd), ws); + util_hash_table_set(fd_tab, intptr_to_pointer(ws->fd), ws); /* We must unlock the mutex once the winsys is fully initialized, so that * other threads attempting to create the winsys from the same fd will @@ -740,6 +744,9 @@ fail: ws->kman->destroy(ws->kman); if (ws->surf_man) radeon_surface_manager_free(ws->surf_man); + if (ws->fd) + close(ws->fd); + FREE(ws); return NULL; } _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
