Commit 0a82b3ee authored by Sam Lantinga's avatar Sam Lantinga

Fixed double-free in the shader cache at shutdown

parent a5bb3d3f
...@@ -190,24 +190,34 @@ static void ...@@ -190,24 +190,34 @@ static void
GLES2_DestroyRenderer(SDL_Renderer *renderer) GLES2_DestroyRenderer(SDL_Renderer *renderer)
{ {
GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata;
GLES2_ProgramCacheEntry *entry;
GLES2_ProgramCacheEntry *next;
/* Deallocate everything */ /* Deallocate everything */
if (rdata) { if (rdata) {
GLES2_ActivateRenderer(renderer); GLES2_ActivateRenderer(renderer);
entry = rdata->program_cache.head; {
while (entry) { GLES2_ShaderCacheEntry *entry;
glDeleteShader(entry->vertex_shader->id); GLES2_ShaderCacheEntry *next;
glDeleteShader(entry->fragment_shader->id); entry = rdata->shader_cache.head;
SDL_free(entry->vertex_shader); while (entry)
SDL_free(entry->fragment_shader); {
glDeleteProgram(entry->id); glDeleteShader(entry->id);
next = entry->next; next = entry->next;
SDL_free(entry); SDL_free(entry);
entry = next; entry = next;
} }
}
{
GLES2_ProgramCacheEntry *entry;
GLES2_ProgramCacheEntry *next;
entry = rdata->program_cache.head;
while (entry) {
glDeleteProgram(entry->id);
next = entry->next;
SDL_free(entry);
entry = next;
}
}
if (rdata->context) { if (rdata->context) {
SDL_GL_DeleteContext(rdata->context); SDL_GL_DeleteContext(rdata->context);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment