r600: protect cleanup instructions from double free

We might get the cleanup when we have not translated the shader yet
e.g 2 programstringnotifys in a row
This commit is contained in:
Andre Maasikas 2010-09-02 11:09:52 +03:00
parent 5697bf1660
commit 7753416c5b
2 changed files with 20 additions and 2 deletions

View file

@ -8076,20 +8076,27 @@ GLboolean Process_Vertex_Exports(r700_AssemblerBase *pR700AsmCode,
GLboolean Clean_Up_Assembler(r700_AssemblerBase *pR700AsmCode)
{
FREE(pR700AsmCode->pInstDeps);
if(NULL != pR700AsmCode->pInstDeps)
{
FREE(pR700AsmCode->pInstDeps);
pR700AsmCode->pInstDeps = NULL;
}
if(NULL != pR700AsmCode->subs)
{
FREE(pR700AsmCode->subs);
pR700AsmCode->subs = NULL;
}
if(NULL != pR700AsmCode->callers)
{
FREE(pR700AsmCode->callers);
pR700AsmCode->callers = NULL;
}
if(NULL != pR700AsmCode->presubs)
{
FREE(pR700AsmCode->presubs);
pR700AsmCode->presubs = NULL;
}
return GL_TRUE;

View file

@ -584,7 +584,11 @@ void cleanup_vfetch_shaderinst(R700_Shader *pShader)
void Clean_Up_Shader(R700_Shader *pShader)
{
FREE(pShader->pProgram);
if(NULL != pShader->pProgram)
{
FREE(pShader->pProgram);
pShader->pProgram = NULL;
}
R700ShaderInstruction *pInst;
R700ShaderInstruction *pInstToFree;
@ -596,6 +600,8 @@ void Clean_Up_Shader(R700_Shader *pShader)
pInst = pInst->pNextInst;
FREE(pInstToFree);
};
pShader->lstCFInstructions.pHead = NULL;
pInst = pShader->lstALUInstructions.pHead;
while(NULL != pInst)
{
@ -603,6 +609,8 @@ void Clean_Up_Shader(R700_Shader *pShader)
pInst = pInst->pNextInst;
FREE(pInstToFree);
};
pShader->lstALUInstructions.pHead = NULL;
pInst = pShader->lstTEXInstructions.pHead;
while(NULL != pInst)
{
@ -610,6 +618,8 @@ void Clean_Up_Shader(R700_Shader *pShader)
pInst = pInst->pNextInst;
FREE(pInstToFree);
};
pShader->lstTEXInstructions.pHead = NULL;
pInst = pShader->lstVTXInstructions.pHead;
while(NULL != pInst)
{
@ -617,5 +627,6 @@ void Clean_Up_Shader(R700_Shader *pShader)
pInst = pInst->pNextInst;
FREE(pInstToFree);
};
pShader->lstVTXInstructions.pHead = NULL;
}