diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c index 29045d30253..5647d985380 100644 --- a/src/gallium/frontends/dri/dri2.c +++ b/src/gallium/frontends/dri/dri2.c @@ -2291,7 +2291,7 @@ dri2_init_screen(struct dri_screen *screen) } if (!pscreen) - goto release_pipe; + goto fail; screen->throttle = pscreen->get_param(pscreen, PIPE_CAP_THROTTLE); @@ -2302,7 +2302,7 @@ dri2_init_screen(struct dri_screen *screen) configs = dri_init_screen_helper(screen, pscreen); if (!configs) - goto destroy_screen; + goto fail; screen->can_share_buffer = true; screen->auto_fake_front = dri_with_format(screen); @@ -2323,13 +2323,9 @@ dri2_init_screen(struct dri_screen *screen) return configs; -destroy_screen: +fail: dri_destroy_screen_helper(screen); -release_pipe: - if (screen->dev) - pipe_loader_release(&screen->dev, 1); - return NULL; } @@ -2353,13 +2349,13 @@ dri_swrast_kms_init_screen(struct dri_screen *screen) #endif if (!pscreen) - goto release_pipe; + goto fail; dri2_init_screen_extensions(screen, pscreen, true); configs = dri_init_screen_helper(screen, pscreen); if (!configs) - goto destroy_screen; + goto fail; screen->can_share_buffer = false; screen->auto_fake_front = dri_with_format(screen); @@ -2380,13 +2376,9 @@ dri_swrast_kms_init_screen(struct dri_screen *screen) return configs; -destroy_screen: +fail: dri_destroy_screen_helper(screen); -release_pipe: - if (screen->dev) - pipe_loader_release(&screen->dev, 1); - #endif // GALLIUM_SOFTPIPE return NULL; } diff --git a/src/gallium/frontends/dri/dri_screen.c b/src/gallium/frontends/dri/dri_screen.c index 566765e220f..5c2fd212eef 100644 --- a/src/gallium/frontends/dri/dri_screen.c +++ b/src/gallium/frontends/dri/dri_screen.c @@ -776,6 +776,11 @@ dri_destroy_screen_helper(struct dri_screen * screen) if (screen->base.screen) screen->base.screen->destroy(screen->base.screen); + if (screen->dev) { + pipe_loader_release(&screen->dev, 1); + screen->dev = NULL; + } + mtx_destroy(&screen->opencl_func_mutex); } @@ -784,8 +789,6 @@ dri_destroy_screen(struct dri_screen *screen) { dri_destroy_screen_helper(screen); - pipe_loader_release(&screen->dev, 1); - free(screen->options.force_gl_vendor); free(screen->options.force_gl_renderer); free(screen->options.mesa_extension_override); diff --git a/src/gallium/frontends/dri/drisw.c b/src/gallium/frontends/dri/drisw.c index ddffe565443..95e43082441 100644 --- a/src/gallium/frontends/dri/drisw.c +++ b/src/gallium/frontends/dri/drisw.c @@ -594,8 +594,6 @@ drisw_init_screen(struct dri_screen *screen) return configs; fail: dri_destroy_screen_helper(screen); - if (screen->dev) - pipe_loader_release(&screen->dev, 1); return NULL; } diff --git a/src/gallium/frontends/dri/kopper.c b/src/gallium/frontends/dri/kopper.c index 5dc178d63cd..5c03df44c86 100644 --- a/src/gallium/frontends/dri/kopper.c +++ b/src/gallium/frontends/dri/kopper.c @@ -169,8 +169,6 @@ kopper_init_screen(struct dri_screen *screen) return configs; fail: dri_destroy_screen_helper(screen); - if (screen->dev) - pipe_loader_release(&screen->dev, 1); return NULL; }