Browse Source

Free any temporary environment memory at SDL_Quit()

Fixes https://github.com/libsdl-org/SDL/issues/9860
Sam Lantinga 11 months ago
parent
commit
156ca356b5
2 changed files with 16 additions and 0 deletions
  1. 3 0
      src/SDL.c
  2. 13 0
      src/stdlib/SDL_getenv.c

+ 3 - 0
src/SDL.c

@@ -58,6 +58,7 @@
 extern int SDL_HelperWindowCreate(void);
 extern int SDL_HelperWindowDestroy(void);
 #endif
+extern void SDL_FreeEnvironmentMemory(void);
 
 #ifdef SDL_BUILD_MAJOR_VERSION
 SDL_COMPILE_TIME_ASSERT(SDL_BUILD_MAJOR_VERSION,
@@ -557,6 +558,8 @@ void SDL_Quit(void)
 
     SDL_CleanupTLS();
 
+    SDL_FreeEnvironmentMemory();
+
     SDL_bInMainQuit = SDL_FALSE;
 }
 

+ 13 - 0
src/stdlib/SDL_getenv.c

@@ -32,6 +32,19 @@
 /* Note this isn't thread-safe! */
 static char *SDL_envmem = NULL; /* Ugh, memory leak */
 static size_t SDL_envmemlen = 0;
+
+void SDL_FreeEnvironmentMemory(void)
+{
+    if (SDL_envmem) {
+        SDL_free(SDL_envmem);
+        SDL_envmem = NULL;
+        SDL_envmemlen = 0;
+    }
+}
+#else
+void SDL_FreeEnvironmentMemory(void)
+{
+}
 #endif
 
 /* Put a variable into the environment */