diff --git a/src/gallium/frontends/osmesa/osmesa.c b/src/gallium/frontends/osmesa/osmesa.c index 5ce5f7b7da6..5c7f27d6dc2 100644 --- a/src/gallium/frontends/osmesa/osmesa.c +++ b/src/gallium/frontends/osmesa/osmesa.c @@ -134,9 +134,26 @@ osmesa_st_get_param(struct st_manager *smapi, enum st_manager_param param) static struct st_manager *stmgr = NULL; static struct st_api *stapi = NULL; +static void +destroy_st_manager(void) +{ + if (stmgr) { + if (stmgr->screen) + stmgr->screen->destroy(stmgr->screen); + FREE(stmgr); + } + + if (stapi && stapi->destroy) { + stapi->destroy(stapi); + } +} + static void create_st_manager(void) { + if (atexit(destroy_st_manager) != 0) + return; + stmgr = CALLOC_STRUCT(st_manager); if (stmgr) { stmgr->screen = osmesa_create_screen();