From 3b0b44f7def0acb4f7a7aef086c0bece321418a6 Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Wed, 9 Apr 2014 01:07:52 +0200 Subject: winsys/radeon: fix a race condition in initialization of radeon_winsys::screen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Create the screen in the winsys while the mutex is locked. This also results in a nice code cleanup! Reviewed-by: Michel Dänzer Reviewed-by: Christian König --- src/gallium/targets/r600/common/drm_target.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'src/gallium/targets/r600') diff --git a/src/gallium/targets/r600/common/drm_target.c b/src/gallium/targets/r600/common/drm_target.c index ab1eec6ac9a..09250c79fb9 100644 --- a/src/gallium/targets/r600/common/drm_target.c +++ b/src/gallium/targets/r600/common/drm_target.c @@ -35,19 +35,8 @@ static struct pipe_screen *create_screen(int fd) { struct radeon_winsys *radeon; - radeon = radeon_drm_winsys_create(fd); - if (!radeon) - return NULL; - - if (!radeon->screen) { - radeon->screen = r600_screen_create(radeon); - if (!radeon->screen) - return NULL; - - radeon->screen = debug_screen_wrap(radeon->screen); - } - - return radeon->screen; + radeon = radeon_drm_winsys_create(fd, r600_screen_create); + return radeon ? debug_screen_wrap(radeon->screen) : NULL; } static const struct drm_conf_ret throttle_ret = { -- cgit v1.2.3