summaryrefslogtreecommitdiffstats
path: root/src/gallium/targets/pipe-loader/pipe_r600.c
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2014-04-09 01:07:52 +0200
committerMarek Olšák <marek.olsak@amd.com>2014-04-10 20:50:17 +0200
commit3b0b44f7def0acb4f7a7aef086c0bece321418a6 (patch)
treeb156e7e948909c0a31d127d30099da60cb178b5d /src/gallium/targets/pipe-loader/pipe_r600.c
parentac330d4130cb005c75972da2a701b674413456ba (diff)
downloadexternal_mesa3d-3b0b44f7def0acb4f7a7aef086c0bece321418a6.zip
external_mesa3d-3b0b44f7def0acb4f7a7aef086c0bece321418a6.tar.gz
external_mesa3d-3b0b44f7def0acb4f7a7aef086c0bece321418a6.tar.bz2
winsys/radeon: fix a race condition in initialization of radeon_winsys::screen
Create the screen in the winsys while the mutex is locked. This also results in a nice code cleanup! Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'src/gallium/targets/pipe-loader/pipe_r600.c')
-rw-r--r--src/gallium/targets/pipe-loader/pipe_r600.c14
1 files changed, 2 insertions, 12 deletions
diff --git a/src/gallium/targets/pipe-loader/pipe_r600.c b/src/gallium/targets/pipe-loader/pipe_r600.c
index 5d89aca..0c59087 100644
--- a/src/gallium/targets/pipe-loader/pipe_r600.c
+++ b/src/gallium/targets/pipe-loader/pipe_r600.c
@@ -7,19 +7,9 @@ static struct pipe_screen *
create_screen(int fd)
{
struct radeon_winsys *rw;
- struct pipe_screen *screen;
- rw = radeon_drm_winsys_create(fd);
- if (!rw)
- return NULL;
-
- screen = r600_screen_create(rw);
- if (!screen)
- return NULL;
-
- screen = debug_screen_wrap(screen);
-
- return screen;
+ rw = radeon_drm_winsys_create(fd, r600_screen_create);
+ return rw ? debug_screen_wrap(rw->screen) : NULL;
}
PUBLIC