foxygit / doom Log in
commit 57a9f56e2cba50249ee8a96533c8baed47814f92
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Fri Dec 10 23:56:32 2010 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Fri Dec 10 23:56:32 2010 +0000

    Fix memory leak when dynamically resizing window in true color video
    modes.

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 2215
---
 src/i_video.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/i_video.c b/src/i_video.c
index 488c08a0..ad4d7f39 100644
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -97,7 +97,7 @@ static SDL_Surface *screen;
 // This is used when we are rendering in 32-bit screen mode.
 // When in a real 8-bit screen mode, screenbuffer == screen.

-static SDL_Surface *screenbuffer;
+static SDL_Surface *screenbuffer = NULL;

 // palette

@@ -1646,6 +1646,14 @@ static void SetVideoMode(screen_mode_t *mode, int w, int h)

     doompal = W_CacheLumpName(DEH_String("PLAYPAL"), PU_CACHE);

+    // If we are already running and in a true color mode, we need
+    // to free the screenbuffer surface before setting the new mode.
+
+    if (screenbuffer != NULL && screen != screenbuffer)
+    {
+        SDL_FreeSurface(screenbuffer);
+    }
+
     // Generate lookup tables before setting the video mode.

     if (mode != NULL && mode->InitMode != NULL)