mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-16 11:06:49 +01:00
Fixed bug 2132 - Tests may use invalid SDL_window pointers when windows are closed
norfanin Some of the tests keep using the pointers of a destroyed SDL_Window when the common event handling handled the close event. The event handler itself does not NULL the pointer after the destruction. The attached patch adds a loop in the handler that will assign NULL to the destroyed window. It also adds checks to some of the tests so they skip those windows by checking for NULL.
This commit is contained in:
parent
0db36f51aa
commit
529664278f
@ -1200,6 +1200,12 @@ SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done)
|
|||||||
SDL_Window *window = SDL_GetWindowFromID(event->window.windowID);
|
SDL_Window *window = SDL_GetWindowFromID(event->window.windowID);
|
||||||
if (window) {
|
if (window) {
|
||||||
SDL_DestroyWindow(window);
|
SDL_DestroyWindow(window);
|
||||||
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
|
if (window == state->windows[i]) {
|
||||||
|
state->windows[i] = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -253,6 +253,8 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
SDL_Renderer *renderer = state->renderers[i];
|
SDL_Renderer *renderer = state->renderers[i];
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
@ -340,6 +340,8 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
int w, h;
|
int w, h;
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
SDL_GL_MakeCurrent(state->windows[i], context);
|
SDL_GL_MakeCurrent(state->windows[i], context);
|
||||||
SDL_GL_GetDrawableSize(state->windows[i], &w, &h);
|
SDL_GL_GetDrawableSize(state->windows[i], &w, &h);
|
||||||
glViewport(0, 0, w, h);
|
glViewport(0, 0, w, h);
|
||||||
|
@ -312,6 +312,8 @@ main(int argc, char *argv[])
|
|||||||
SDLTest_CommonEvent(state, &event, &done);
|
SDLTest_CommonEvent(state, &event, &done);
|
||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
status = SDL_GL_MakeCurrent(state->windows[i], context[i]);
|
status = SDL_GL_MakeCurrent(state->windows[i], context[i]);
|
||||||
if (status) {
|
if (status) {
|
||||||
SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
|
SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
|
||||||
|
@ -196,6 +196,8 @@ void Redraw() {
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
SDL_Renderer *renderer = state->renderers[i];
|
SDL_Renderer *renderer = state->renderers[i];
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
@ -310,6 +310,8 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
SDL_Renderer *renderer = state->renderers[i];
|
SDL_Renderer *renderer = state->renderers[i];
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
@ -84,6 +84,8 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
SDL_Renderer *renderer = state->renderers[i];
|
SDL_Renderer *renderer = state->renderers[i];
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
@ -188,6 +188,8 @@ main(int argc, char *argv[])
|
|||||||
SDLTest_CommonEvent(state, &event, &done);
|
SDLTest_CommonEvent(state, &event, &done);
|
||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
Draw(&drawstates[i]);
|
Draw(&drawstates[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,6 +285,8 @@ main(int argc, char *argv[])
|
|||||||
SDLTest_CommonEvent(state, &event, &done);
|
SDLTest_CommonEvent(state, &event, &done);
|
||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
if (test_composite) {
|
if (test_composite) {
|
||||||
if (!DrawComposite(&drawstates[i])) done = 1;
|
if (!DrawComposite(&drawstates[i])) done = 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -178,6 +178,8 @@ main(int argc, char *argv[])
|
|||||||
SDLTest_CommonEvent(state, &event, &done);
|
SDLTest_CommonEvent(state, &event, &done);
|
||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
Draw(&drawstates[i]);
|
Draw(&drawstates[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -360,6 +360,8 @@ main(int argc, char *argv[])
|
|||||||
SDLTest_CommonEvent(state, &event, &done);
|
SDLTest_CommonEvent(state, &event, &done);
|
||||||
}
|
}
|
||||||
for (i = 0; i < state->num_windows; ++i) {
|
for (i = 0; i < state->num_windows; ++i) {
|
||||||
|
if (state->windows[i] == NULL)
|
||||||
|
continue;
|
||||||
MoveSprites(state->renderers[i], sprites[i]);
|
MoveSprites(state->renderers[i], sprites[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user