mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
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:
parent
5697bf1660
commit
7753416c5b
2 changed files with 20 additions and 2 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue