mesa: fix deleting the dummy ATI_fs
[mesa.git] / src / mesa / main / atifragshader.c
index 34f45c6800877893400804a96fadb262a27e53a1..49ddb6e5af6eff6ed139e5c96e75b4ada219cfa7 100644 (file)
@@ -60,6 +60,10 @@ void
 _mesa_delete_ati_fragment_shader(struct gl_context *ctx, struct ati_fragment_shader *s)
 {
    GLuint i;
+
+   if (s == &DummyShader)
+      return;
+
    for (i = 0; i < MAX_NUM_PASSES_ATI; i++) {
       free(s->Instructions[i]);
       free(s->SetupInst[i]);
@@ -201,11 +205,15 @@ _mesa_GenFragmentShadersATI(GLuint range)
       return 0;
    }
 
+   _mesa_HashLockMutex(ctx->Shared->ATIShaders);
+
    first = _mesa_HashFindFreeKeyBlock(ctx->Shared->ATIShaders, range);
    for (i = 0; i < range; i++) {
-      _mesa_HashInsert(ctx->Shared->ATIShaders, first + i, &DummyShader);
+      _mesa_HashInsertLocked(ctx->Shared->ATIShaders, first + i, &DummyShader);
    }
 
+   _mesa_HashUnlockMutex(ctx->Shared->ATIShaders);
+
    return first;
 }
 
@@ -260,9 +268,6 @@ _mesa_BindFragmentShaderATI(GLuint id)
    assert(ctx->ATIFragmentShader.Current);
    if (newProg)
       newProg->RefCount++;
-
-   /*if (ctx->Driver.BindProgram)
-      ctx->Driver.BindProgram(ctx, target, prog); */
 }
 
 void GLAPIENTRY
@@ -294,7 +299,6 @@ _mesa_DeleteFragmentShaderATI(GLuint id)
       if (prog) {
         prog->RefCount--;
         if (prog->RefCount <= 0) {
-           assert(prog != &DummyShader);
             _mesa_delete_ati_fragment_shader(ctx, prog);
         }
       }