From 8f7c95e425c8751e0728e20f4d65a8cfcf671497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kriszti=C3=A1n=20Csord=C3=A1s?= Date: Mon, 28 Oct 2019 20:43:22 +0100 Subject: [PATCH] Fix SDL_Texture double free (#10156) Double freeing of SDL_Texture caused assertion failure when calling HardwareDisplayDrawingEngine::SetVSync. According to SDL documentation, SDL_DestroyRenderer frees the associated textures. --- .../drawing/engines/HardwareDisplayDrawingEngine.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp b/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp index c50b86bfab..8365a9f789 100644 --- a/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp +++ b/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp @@ -62,14 +62,6 @@ public: ~HardwareDisplayDrawingEngine() override { - if (_screenTexture != nullptr) - { - SDL_DestroyTexture(_screenTexture); - } - if (_scaledScreenTexture != nullptr) - { - SDL_DestroyTexture(_scaledScreenTexture); - } SDL_FreeFormat(_screenTextureFormat); SDL_DestroyRenderer(_sdlRenderer); } @@ -85,6 +77,8 @@ public: { _useVsync = vsync; SDL_DestroyRenderer(_sdlRenderer); + _screenTexture = nullptr; + _scaledScreenTexture = nullptr; Initialise(); Resize(_uiContext->GetWidth(), _uiContext->GetHeight()); }