Commit fe2cc8d86c04e206d2e40e9c299ba5018fa72fe6

Ozkan Sezer 2020-10-14T23:01:04

OS2_VideoQuit(): avoid double free()ing of displays. Our caller SDL_VideoQuit() already frees display_modes, driverdata, etc. Noticed in bitwiseworks' version at https://github.com/bitwiseworks/SDL2-os2

diff --git a/src/video/os2/SDL_os2video.c b/src/video/os2/SDL_os2video.c
index 60c112a..aab9eb2 100644
--- a/src/video/os2/SDL_os2video.c
+++ b/src/video/os2/SDL_os2video.c
@@ -1612,36 +1612,13 @@ static int OS2_VideoInit(_THIS)
 static void OS2_VideoQuit(_THIS)
 {
   PSDL_VideoData       pVData = (PSDL_VideoData)_this->driverdata;
-  ULONG                ulDisplayIdx, ulModeIdx;
-  SDL_VideoDisplay     *pSDLDisplay;
 
   OS2_QuitMouse( _this );
 
   WinDestroyMsgQueue( pVData->hmq );
   WinTerminate( pVData->hab );
 
-  // We support only one display. Free all listed displays data for the future.
-  for( ulDisplayIdx = 0; ulDisplayIdx < _this->num_displays; ulDisplayIdx++ )
-  {
-    pSDLDisplay = &_this->displays[ulDisplayIdx];
-
-    // Free video mode data (PMODEDATA).
-    if ( pSDLDisplay->desktop_mode.driverdata != NULL )
-      SDL_free( pSDLDisplay->desktop_mode.driverdata );
-
-    // We support only one mode - desktop_mode. Free all modes for the future.
-    for( ulModeIdx = 0; ulModeIdx < pSDLDisplay->num_display_modes;
-         ulModeIdx++ )
-      if ( pSDLDisplay->display_modes[ulModeIdx].driverdata != NULL )
-        SDL_free( pSDLDisplay->display_modes[ulModeIdx].driverdata );
-
-    // Free display data (PDISPLAYDATA).
-    if ( pSDLDisplay->driverdata != NULL )
-    {
-      SDL_free( pSDLDisplay->driverdata );
-      pSDLDisplay->driverdata = NULL;
-    }
-  }
+  /* our caller SDL_VideoQuit() already frees display_modes, driverdata, etc. */
 }
 
 static int OS2_GetDisplayBounds(_THIS, SDL_VideoDisplay *display,