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

Reply via email to