free subroutine array (fix mem leak)
authorBrian <brian@yutani.localnet.net>
Thu, 19 Apr 2007 21:37:24 +0000 (15:37 -0600)
committerBrian <brian@yutani.localnet.net>
Sat, 21 Apr 2007 16:05:05 +0000 (10:05 -0600)
src/mesa/shader/slang/slang_emit.c

index c2f2e85ff1483754e7778c02a05accc597d84fdd..badeb69b3fe70245428eb5c6f4d177aaa2d50941 100644 (file)
@@ -1762,6 +1762,7 @@ _slang_resolve_subroutines(slang_emit_info *emitInfo)
    mainP->Instructions = _mesa_realloc_instructions(mainP->Instructions,
                                                     mainP->NumInstructions,
                                                     total);
+   mainP->NumInstructions = total;
    for (i = 0; i < emitInfo->NumSubroutines; i++) {
       struct gl_program *sub = emitInfo->Subroutines[i];
       _mesa_copy_instructions(mainP->Instructions + subroutineLoc[i],
@@ -1771,7 +1772,13 @@ _slang_resolve_subroutines(slang_emit_info *emitInfo)
       sub->Parameters = NULL; /* prevent double-free */
       _mesa_delete_program(ctx, sub);
    }
-   mainP->NumInstructions = total;
+
+   /* free subroutine list */
+   if (emitInfo->Subroutines) {
+      _mesa_free(emitInfo->Subroutines);
+      emitInfo->Subroutines = NULL;
+   }
+   emitInfo->NumSubroutines = 0;
 
    /* Examine CAL instructions.
     * At this point, the BranchTarget field of the CAL instructions is