nv50: avoid freeing the symbols if they're about to be stored
authorIlia Mirkin <imirkin@alum.mit.edu>
Wed, 3 Feb 2016 18:52:26 +0000 (13:52 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 3 Feb 2016 23:40:26 +0000 (18:40 -0500)
Spotted by Coverity

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/gallium/drivers/nouveau/nv50/nv50_program.c

index 888d62e1c52fa03b785a434266cf2634e250e56a..a67ef28abf8a7ca8bafb7a46def7d48316ed9440 100644 (file)
@@ -369,7 +369,6 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
       NOUVEAU_ERR("shader translation failed: %i\n", ret);
       goto out;
    }
-   FREE(info->bin.syms);
 
    prog->code = info->bin.code;
    prog->code_size = info->bin.codeSize;
@@ -403,10 +402,13 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
          break;
       }
       prog->gp.vert_count = info->prop.gp.maxVertices;
-   } else
+   }
+
    if (prog->type == PIPE_SHADER_COMPUTE) {
       prog->cp.syms = info->bin.syms;
       prog->cp.num_syms = info->bin.numSyms;
+   } else {
+      FREE(info->bin.syms);
    }
 
    if (prog->pipe.stream_output.num_outputs)
@@ -507,6 +509,9 @@ nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p)
    FREE(p->interps);
    FREE(p->so);
 
+   if (type == PIPE_SHADER_COMPUTE)
+      FREE(p->cp.syms);
+
    memset(p, 0, sizeof(*p));
 
    p->pipe = pipe;