glsl: fix memory leak
authorBrian Paul <brianp@vmware.com>
Tue, 27 Oct 2009 22:28:39 +0000 (16:28 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 27 Oct 2009 22:29:15 +0000 (16:29 -0600)
A slightly modified version of a patch from Vinson Lee.

src/mesa/shader/slang/slang_link.c

index 71038d2d94efc80623e73de55b9ad8e3ac95502d..144c1265251f284d2b6fb116a5d28db67c09fc4b 100644 (file)
@@ -104,7 +104,7 @@ link_varying_vars(GLcontext *ctx,
    GLuint *map, i, firstVarying, newFile;
    GLbitfield *inOutFlags;
 
-   map = (GLuint *) malloc(prog->Varying->NumParameters * sizeof(GLuint));
+   map = (GLuint *) _mesa_malloc(prog->Varying->NumParameters * sizeof(GLuint));
    if (!map)
       return GL_FALSE;
 
@@ -135,6 +135,7 @@ link_varying_vars(GLcontext *ctx,
             &shProg->Varying->Parameters[j];
          if (var->Size != v->Size) {
             link_error(shProg, "mismatched varying variable types");
+            _mesa_free(map);
             return GL_FALSE;
          }
          if (!bits_agree(var->Flags, v->Flags, PROG_PARAM_BIT_CENTROID)) {
@@ -142,6 +143,7 @@ link_varying_vars(GLcontext *ctx,
             _mesa_snprintf(msg, sizeof(msg),
                            "centroid modifier mismatch for '%s'", var->Name);
             link_error(shProg, msg);
+            _mesa_free(map);
             return GL_FALSE;
          }
          if (!bits_agree(var->Flags, v->Flags, PROG_PARAM_BIT_INVARIANT)) {
@@ -149,6 +151,7 @@ link_varying_vars(GLcontext *ctx,
             _mesa_snprintf(msg, sizeof(msg),
                            "invariant modifier mismatch for '%s'", var->Name);
             link_error(shProg, msg);
+            _mesa_free(map);
             return GL_FALSE;
          }
       }
@@ -160,6 +163,7 @@ link_varying_vars(GLcontext *ctx,
 
       if (shProg->Varying->NumParameters > ctx->Const.MaxVarying) {
          link_error(shProg, "Too many varying variables");
+         _mesa_free(map);
          return GL_FALSE;
       }
 
@@ -199,7 +203,7 @@ link_varying_vars(GLcontext *ctx,
       }
    }
 
-   free(map);
+   _mesa_free(map);
 
    /* these will get recomputed before linking is completed */
    prog->InputsRead = 0x0;