st/mesa: call glthread_destroy() before _vbo_DestroyContext()
authorTimothy Arceri <tarceri@itsqueeze.com>
Thu, 16 Mar 2017 12:09:19 +0000 (23:09 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Thu, 16 Mar 2017 22:47:02 +0000 (09:47 +1100)
Otherwise we have a race condition between vbo calls in the
glthread and the _vbo_DestroyContext() call.

This fixes a bunch of piglit crashes.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/main/context.c
src/mesa/state_tracker/st_context.c

index 0a9c65c..8876ca2 100644 (file)
@@ -1294,8 +1294,6 @@ _mesa_free_context_data( struct gl_context *ctx )
       _mesa_make_current(ctx, NULL, NULL);
    }
 
-   _mesa_glthread_destroy(ctx);
-
    /* unreference WinSysDraw/Read buffers */
    _mesa_reference_framebuffer(&ctx->WinSysDrawBuffer, NULL);
    _mesa_reference_framebuffer(&ctx->WinSysReadBuffer, NULL);
index 869e6e9..c7d25ec 100644 (file)
@@ -575,6 +575,9 @@ void st_destroy_context( struct st_context *st )
    struct gl_context *ctx = st->ctx;
    GLuint i;
 
+   /* This must be called first so that glthread has a chance to finish */
+   _mesa_glthread_destroy(ctx);
+
    _mesa_HashWalk(ctx->Shared->TexObjects, destroy_tex_sampler_cb, st);
 
    st_reference_fragprog(st, &st->fp, NULL);