From b7b6d8ab7a6f2c3231a647a34e9dcc048eee8604 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 22 Jun 2014 02:30:36 -0700 Subject: [PATCH] Fixed crash initializing OpenGL ES renderer if OpenGL renderer fails --- src/video/SDL_video.c | 2 +- src/video/cocoa/SDL_cocoawindow.m | 2 ++ src/video/uikit/SDL_uikitwindow.m | 4 +++- src/video/windows/SDL_windowswindow.c | 2 ++ src/video/x11/SDL_x11window.c | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 2a6de10d67a58..2e097d059b16a 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1402,7 +1402,7 @@ SDL_RecreateWindow(SDL_Window * window, Uint32 flags) if (_this->CreateWindow && !(flags & SDL_WINDOW_FOREIGN)) { if (_this->CreateWindow(_this, window) < 0) { - if (flags & SDL_WINDOW_OPENGL) { + if ((flags & SDL_WINDOW_OPENGL) && !(window->flags & SDL_WINDOW_OPENGL)) { SDL_GL_UnloadLibrary(); } return -1; diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index 71f7bb67be44c..e9364d8d41bb3 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -1488,6 +1488,8 @@ - (void)resetCursorRects NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + window->driverdata = NULL; + if (data) { [data->listener close]; [data->listener release]; diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m index a8052276e7815..b6c1a0de914be 100644 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -289,11 +289,13 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo UIKit_DestroyWindow(_THIS, SDL_Window * window) { SDL_WindowData *data = (SDL_WindowData *)window->driverdata; + + window->driverdata = NULL; + if (data) { [data->viewcontroller release]; [data->uiwindow release]; SDL_free(data); - window->driverdata = NULL; } } diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index 8ff85a3b1dece..0cbfe78275f3e 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -619,6 +619,8 @@ WIN_DestroyWindow(_THIS, SDL_Window * window) { SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + window->driverdata = NULL; + if (data) { ReleaseDC(data->hwnd, data->hdc); if (data->created) { diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index 5c5bdd61873c4..2eccd279bdefc 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -1393,6 +1393,7 @@ void X11_DestroyWindow(_THIS, SDL_Window * window) { SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + window->driverdata = NULL; if (data) {