Fixing valgrind errors.
authorBob Pendleton <bob@pendleton.com>
Thu, 06 Mar 2008 17:08:10 +0000
changeset 2322 c25d45b7add3
parent 2321 c5feceb0395e
child 2323 4ac07ae446d3
Fixing valgrind errors. One of the error was the result of an unitended recursive call to X11_GL_LoadLibrary which was also fixed.
src/SDL_compat.c
src/video/x11/SDL_x11opengl.c
src/video/x11/SDL_x11window.c
--- a/src/SDL_compat.c	Tue Mar 04 23:09:28 2008 +0000
+++ b/src/SDL_compat.c	Thu Mar 06 17:08:10 2008 +0000
@@ -397,8 +397,8 @@
     }
     if (SDL_VideoWindow) {
         SDL_GetWindowPosition(SDL_VideoWindow, &window_x, &window_y);
+        SDL_DestroyWindow(SDL_VideoWindow);
     }
-    SDL_DestroyWindow(SDL_VideoWindow);
 
     /* Set up the event filter */
     if (!SDL_GetEventFilter(NULL, NULL)) {
--- a/src/video/x11/SDL_x11opengl.c	Tue Mar 04 23:09:28 2008 +0000
+++ b/src/video/x11/SDL_x11opengl.c	Thu Mar 06 17:08:10 2008 +0000
@@ -65,6 +65,8 @@
 #define GL_UnloadObject	SDL_UnloadObject
 #endif
 
+static int X11_GL_InitializeMemory(_THIS);
+
 int
 X11_GL_LoadLibrary(_THIS, const char *path)
 {
@@ -90,7 +92,8 @@
         return -1;
     }
     // LoadLibrary may be called before WindowCreate!
-    X11_GL_Initialize(_this);
+    // Must create the memory used by GL
+    X11_GL_InitializeMemory(_this);
 
     /* Load new function pointers */
     _this->gl_data->glXGetProcAddress =
@@ -254,11 +257,10 @@
     /*     X11_PumpEvents(_this); */ /* can't do that because the windowlist may be inconsitent at this point */
 }
 
-int
-X11_GL_Initialize(_THIS)
+static int
+X11_GL_InitializeMemory(_THIS)
 {
     if (_this->gl_data) {
-        ++_this->gl_data->initialized;
         return 0;
     }
 
@@ -270,18 +272,30 @@
         SDL_OutOfMemory();
         return -1;
     }
-    _this->gl_data->initialized = 1;
-
-    if (X11_GL_LoadLibrary(_this, NULL) < 0) {
-        return -1;
-    }
-
-    /* Initialize extensions */
-    X11_GL_InitExtensions(_this);
+    _this->gl_data->initialized = 0;
 
     return 0;
 }
 
+int
+X11_GL_Initialize(_THIS)
+{
+
+  if (X11_GL_InitializeMemory(_this) < 0) {
+     return -1;
+  }
+  ++_this->gl_data->initialized;
+
+  if (X11_GL_LoadLibrary(_this, NULL) < 0) {
+    return -1;
+  }
+
+  /* Initialize extensions */
+  X11_GL_InitExtensions(_this);
+
+  return 0;
+}
+
 void
 X11_GL_Shutdown(_THIS)
 {
--- a/src/video/x11/SDL_x11window.c	Tue Mar 04 23:09:28 2008 +0000
+++ b/src/video/x11/SDL_x11window.c	Thu Mar 06 17:08:10 2008 +0000
@@ -56,20 +56,6 @@
     data->created = created;
     data->videodata = videodata;
 
-    /* Associate the data with the window */
-    windowlist =
-        (SDL_WindowData **) SDL_realloc(windowlist,
-                                        (numwindows +
-                                         1) * sizeof(*windowlist));
-    if (!windowlist) {
-        SDL_OutOfMemory();
-        SDL_free(data);
-        return -1;
-    }
-    windowlist[numwindows++] = data;
-    videodata->numwindows = numwindows;
-    videodata->windowlist = windowlist;
-
     /* Fill in the SDL window with the window data */
     {
         XWindowAttributes attrib;
@@ -228,6 +214,7 @@
                     return -1;
                 }
                 SDL_memcpy(&cmap, stdmaps, sizeof(XStandardColormap));
+                XFree(stdmaps);
             }
 
             /* OK, we have the best color map, now copy it for use by the
@@ -655,6 +642,7 @@
             XDestroyWindow(display, data->window);
         }
         SDL_free(data);
+        window->driverdata = NULL;
     }
 }