Fixed bug 1579 - Creating a texture with unsupported format may cause double-destruction
Alexander Hirsch 2012-08-25 20:01:29 PDT When creating a SDL_Texture with unsupported format (I'll now refer to it as texture A), SDL_CreateTexture will call SDL_CreateTexture again with GetClosestSupportedFormat to set texture->native (which I will now refer to as texture B). This causes texture B to be put before A in renderer->textures. If texture A is explicitly destroyed, everything is fine. Otherwise, upon SDL_DestroyRenderer, the loop will first encounter texture B, destroy it, then texture A, destroy that which will want to destroy texture->native and since it is already destroyed set an error. The solution could be as simple as swapping texture A with B after texture->native gets set in SDL_CreateTextures.
This commit is contained in:
parent
360f769275
commit
9bea482166
1 changed files with 7 additions and 0 deletions
|
@ -393,6 +393,13 @@ SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Swap textures to have texture before texture->native in the list */
|
||||||
|
texture->native->next = texture->next;
|
||||||
|
texture->prev = texture->native->prev;
|
||||||
|
texture->native->prev = texture;
|
||||||
|
texture->next = texture->native;
|
||||||
|
renderer->textures = texture;
|
||||||
|
|
||||||
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
|
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
|
||||||
texture->yuv = SDL_SW_CreateYUVTexture(format, w, h);
|
texture->yuv = SDL_SW_CreateYUVTexture(format, w, h);
|
||||||
if (!texture->yuv) {
|
if (!texture->yuv) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue