st/mesa: free shader cache buffer on fallback
authorTimothy Arceri <tarceri@itsqueeze.com>
Thu, 23 Feb 2017 03:50:58 +0000 (14:50 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Thu, 23 Feb 2017 22:01:59 +0000 (09:01 +1100)
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
src/mesa/state_tracker/st_shader_cache.c

index eb66f999a5b7710cda338745160368ab53ca176f..fba4b0a3a03bc9aa22d23863fbb8514766646394 100644 (file)
@@ -242,13 +242,14 @@ st_load_tgsi_from_disk_cache(struct gl_context *ctx,
       return false;
 
    struct st_context *st = st_context(ctx);
+   uint8_t *buffer = NULL;
    for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
       if (prog->_LinkedShaders[i] == NULL)
          continue;
 
       unsigned char *sha1 = stage_sha1[i];
       size_t size;
-      uint8_t *buffer = (uint8_t *) disk_cache_get(ctx->Cache, sha1, &size);
+      buffer = (uint8_t *) disk_cache_get(ctx->Cache, sha1, &size);
       if (buffer) {
          struct blob_reader blob_reader;
          blob_reader_init(&blob_reader, buffer, size);
@@ -396,6 +397,7 @@ st_load_tgsi_from_disk_cache(struct gl_context *ctx,
    return true;
 
 fallback_recompile:
+   free(buffer);
 
    for (unsigned i = 0; i < prog->NumShaders; i++) {
       _mesa_glsl_compile_shader(ctx, prog->Shaders[i], false, false, true);